1.APIview使用、
 
https://www.cnblogs.com/xiaonq/p/10124104.html
ModelVIewSet 是对 APIView 封装
ModelSerializer 是对 Serializer
1.1 在 user/urls.py 中添加路由
urlpatterns = [ path('apiview/', views.UserInfoViewSet.as_view()), ]
 
1.2 创建user/serializers.py写序列化器

serializers.ModelSerializer 和 serializers.Serializer field参数说明
 
#创建user/serializers.py写序列化器

# class User(AbstractUser):
  # phone = models.CharField('手机号',max_length=20)
  # img = models.ImageField(upload_to='user',null=True)
  # nick_name = models.CharField('昵称',max_length=20)
  # address = models.CharField('地址',max_length=255)
class UserInfoSerializer(serializers.Serializer):
  id = serializers.CharField(read_only=True) # 普通字段,设置id为只读字段,不能修改
  username = serializers.CharField(min_length=3,max_length=20,error_messages=
{'required': '该字段必填'}) # 显示普通字段
  img = serializers.ImageField(required=False)
  nick_name = serializers.CharField(max_length=20)
  address = serializers.CharField(max_length=255)
  xxx = serializers.SerializerMethodField(read_only=True) # 自定义显示(显示多对
多)
  class Meta:
    model = User # 自定义显示 多对多 字段
def get_xxx(self,row):
  '''row: 传过来的正是 User表的对象'''
  users = row.username # 获取用户名
  return users
# 定义创建语法:ser.save()执行,就会立刻调用create方法用来创建数据
def create(self, validated_data):
  '''validated_data: 表单或者vue请求携带的json:
{"username":"zhangsan","password":"123456"}'''
  # https://www.cnblogs.com/xiaonq/p/7978409.html
  return User.objects.create(**validated_data)
# 定义更新方法
def update(self, instance, validated_data):
  '''
  instance : 查询的对象
  validated_data : postman提交的json数据
  {"username":"zhangsan","password":"123456"}
  '''
  if validated_data.get('username'):
    instance.username = validated_data['username']
  instance.save()
  return instance
# 定义单一字段验证的方法
def validate_name(self, value):
  if value == 'root':
    raise serializers.ValidationError('不能创建root管理员账号')
  return value
# 定义多字段验证方法
def validate(self, attrs):
  print(attrs)
  if attrs.get("username") == 'admin':
    raise serializers.ValidationError('不能创建admin用户')
  return attrs
1.3 在 user/views.py 中添加视图函数 from user.serializers import UserInfoSerializer
class UserInfoViewSet(APIView):
# 查询用户信息
  def get(self, request, *args, **kwargs):
# 一对多、多对多查询都是一样的语法
obj = User.objects.all()
ser = UserInfoSerializer(instance=obj,many=True) # 关联数据多个
# ser = UserInfoSerializer(instance=obj[0]) # 关联数据一个
return Response(ser.data, status=200)
# 创建用户
'''创建用户'''
def post(self,request):
ser = UserInfoSerializer(data=request.data)
# 判断提交数据是否合法
if ser.is_valid():
ser.save()
  
   return Response(data=ser.data, status=201)
   return Response(data=ser.errors,status=400)
  
  def put(self, request):
    pk = request.query_params.get('pk')
    try:
      userinfo = User.objects.get(id = pk)
    except Exception as e:
      return Response(data='用户不存在', status=201)
    # 创建序列化对象,并将要反序列化的数据传递给data构造参数,进而进行验证
    ser = UserInfoSerializer(userinfo,data=request.data)
    if ser.is_valid():
      ser.save()
      return Response(data=ser.data, status=201)
return Response(data=ser.errors,status=400)
 

ApiView 的使用的更多相关文章

  1. Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析

    一.一个请求来到Django 的生命周期   FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...

  2. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...

  3. APIView源码简单分析图

    APIView源码简单分析 !声明:下面这个dispatch分发方法不在是父类View里的dispatch了,APIView重新封装了这个dispatch.(整个核心就是initialize_requ ...

  4. rest-framework之APIView 序列化组件

    rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...

  5. Django Rest framework基础使用之View:APIView, mixins, generic, viewsets

    先看一张图,对DRF的各个APIView,Mixin,Viewset等有个基本印象: 具体使用方法: 1.APIView: DRF 的API视图 有两种实现方式: 一种是基于函数的:@api_view ...

  6. CBV源码分析+APIVIew源码分析

    {drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...

  7. Django通用视图APIView和视图集ViewSet的介绍和使用

    原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630   1.APIView DRF框架的视图的基类是 ...

  8. $Django cbv源码分析 djangorestframework框架之APIView源码分析

    1 CBV的源码分析 #视图 class login (View): pass #路由 url(r'^books/$', views.login.as_view()) #阅读源码: #左侧工程栏--- ...

  9. mixins,generics(ApiView)

    #生成序列化对象class BookModelSerizter(serializers.ModelSerializer): class Meta: model=Book fields='__all__ ...

  10. ModelSerializer序列化(Apiview)

    url部分: url(r'^book/$',views.book.as_view()),url(r'^books/(\d+)/$', views.bookdetail.as_view(),name=' ...

随机推荐

  1. 技术揭秘:华为云DLI背后的核心计算引擎

    摘要:介绍隐藏在华为云数据湖探索服务背后的核心计算引擎Spark,玩转DLI,,轻松完成大数据的分析处理. 本文主要给大家介绍隐藏在华为云数据湖探索服务(后文简称DLI)背后的核心计算引擎——Spar ...

  2. Git的详细使用

    关于Git的详细使用,下面博主的博客写的非常的详细! 可以参考一下. https://blog.csdn.net/qq_19835247/article/details/104620042 人生需要准 ...

  3. 面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 数据结构是写好代码的基础! 说到数据结构基本包括:数组.链表.队列.红黑树等,但当你 ...

  4. 树链剖分详解&题解 P6098 【[USACO19FEB]Cow Land G】

    看到各位大佬们已经把其他的东西讲的很明白了,我这个 juruo 就讲一讲最基本的树链剖分吧. 0.树剖是什么?能吃吗? 不能吃 树剖是树链剖分的简称,我们一般说的树剖其实指重链剖分.当然,还有一种长链 ...

  5. URL与视图函数的映射

    今天跟大家讲的是URL与视图函数的映射 URL与视图函数的映射 url与视图函数的映射是通过@app.route()装饰器实现的. 1.只有一个斜杠代表的是根目录——首页. # coding: utf ...

  6. 聊一聊RocketMQ的注册中心NameServer

    前言 上次我们一起了解了RocketMQ的基本架构原理,那简单的回顾一下RocketMQ的架构组成. RocketMQ其实包含了四个核心部分,NameServer.Broker.Producer.Co ...

  7. 常见的开源 License

    目录 什么是开源软件 什么是 license 商业许可证与开源许可证 对开发者的影响 开源许可证的类型 如何选择开源许可证 什么是开源软件 开放源代码的软件.假设有一天自我感觉代码能力不错,写了个小工 ...

  8. SMBMS

    SMBMS(Supermarket Billing Management System ) 目录 SMBMS(Supermarket Billing Management System ) 1. 项目 ...

  9. pyhton:time模块和datetime模块

    一.time模块 1.相关定义: time模块时间的表达有3种,时间戳,时间元祖,格式化时间 #时间戳: print(time.time())#获取当前时间戳.时间戳的计算是1970纪元后经过的浮点秒 ...

  10. linux系统jdk安装

    1.软件包下载:官网 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载linu ...