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

serializers.ModelSerializer 和 serializers.Serializer field参数说明
 
  1. #创建user/serializers.py写序列化器
  2.  
  3. # class User(AbstractUser):
  4.   # phone = models.CharField('手机号',max_length=20)
  5.   # img = models.ImageField(upload_to='user',null=True)
  6.   # nick_name = models.CharField('昵称',max_length=20)
  7.   # address = models.CharField('地址',max_length=255)
  8. class UserInfoSerializer(serializers.Serializer):
  9.   id = serializers.CharField(read_only=True) # 普通字段,设置id为只读字段,不能修改
  10.   username = serializers.CharField(min_length=3,max_length=20,error_messages=
  11. {'required': '该字段必填'}) # 显示普通字段
  12.   img = serializers.ImageField(required=False)
  13.   nick_name = serializers.CharField(max_length=20)
  14.   address = serializers.CharField(max_length=255)
  15.   xxx = serializers.SerializerMethodField(read_only=True) # 自定义显示(显示多对
  16. 多)
  17.   class Meta:
  18.     model = User
  19.  
  20. # 自定义显示 多对多 字段
  21. def get_xxx(self,row):
  22.   '''row: 传过来的正是 User表的对象'''
  23.   users = row.username # 获取用户名
  24.   return users
  25. # 定义创建语法:ser.save()执行,就会立刻调用create方法用来创建数据
  26. def create(self, validated_data):
  27.   '''validated_data: 表单或者vue请求携带的json:
  28. {"username":"zhangsan","password":"123456"}'''
  29.   # https://www.cnblogs.com/xiaonq/p/7978409.html
  30.   return User.objects.create(**validated_data)
  31. # 定义更新方法
  32. def update(self, instance, validated_data):
  33.   '''
  34.   instance : 查询的对象
  35.   validated_data : postman提交的json数据
  36.   {"username":"zhangsan","password":"123456"}
  37.   '''
  38.   if validated_data.get('username'):
  39.     instance.username = validated_data['username']
  40.   instance.save()
  41.   return instance
  42. # 定义单一字段验证的方法
  43. def validate_name(self, value):
  44.   if value == 'root':
  45.     raise serializers.ValidationError('不能创建root管理员账号')
  46.   return value
  47. # 定义多字段验证方法
  48. def validate(self, attrs):
  49.   print(attrs)
  50.   if attrs.get("username") == 'admin':
  51.     raise serializers.ValidationError('不能创建admin用户')
  52.   return attrs
  53. 1.3 user/views.py 中添加视图函数
  54.  
  55. from user.serializers import UserInfoSerializer
  56. class UserInfoViewSet(APIView):
  57. # 查询用户信息
  58.   def get(self, request, *args, **kwargs):
  59. # 一对多、多对多查询都是一样的语法
  60. obj = User.objects.all()
  61. ser = UserInfoSerializer(instance=obj,many=True) # 关联数据多个
  62. # ser = UserInfoSerializer(instance=obj[0]) # 关联数据一个
  63. return Response(ser.data, status=200)
  64. # 创建用户
  65. '''创建用户'''
  66. def post(self,request):
  67. ser = UserInfoSerializer(data=request.data)
  68. # 判断提交数据是否合法
  69. if ser.is_valid():
  70. ser.save()
  71.   
  72.    return Response(data=ser.data, status=201)
  73.    return Response(data=ser.errors,status=400)
  74.   
  75.   def put(self, request):
  76.     pk = request.query_params.get('pk')
  77.     try:
  78.       userinfo = User.objects.get(id = pk)
  79.     except Exception as e:
  80.       return Response(data='用户不存在', status=201)
  81.     # 创建序列化对象,并将要反序列化的数据传递给data构造参数,进而进行验证
  82.     ser = UserInfoSerializer(userinfo,data=request.data)
  83.     if ser.is_valid():
  84.       ser.save()
  85.       return Response(data=ser.data, status=201)
  86. 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. 面试官:谈一下你对DDD的理解?我:马什么梅?

    领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型.领域对象模型和分析对象模型. ——<UML和模式应用> 我们在日常开发中,经常针 ...

  2. [ASP.NET Core开发实战]基础篇06 配置

    配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...

  3. laravel5学习并搭建网站【更新至2020-09-03】

    之前一直不清楚 php artisan 要如何使用,有朋友推荐使用phpstorm可以进行命令行执行, 现在发现其实如果真的不喜欢phpstorm的加载缓慢,可以试试计算机原有的命令行 记住需要跳转到 ...

  4. Winform TextBox 数据绑定空值校验问题

    问题: using System; using System.ComponentModel.DataAnnotations; public class Cost { /// <summary&g ...

  5. Brackets(括号最大匹配问题(区间dp))

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

  6. java初探(1)之静态页面化——客户端缓存

    利用服务端缓存技术,将页面和对象缓存在redis中,可以减少时间浪费,内存开销.但在每次请求的过程中,仍然会有大量静态资源的请求和返回. 使用静态页面技术,页面不必要使用页面交互技术,比如thymel ...

  7. [BUUOJ记录] [强网杯 2019]随便注(三种方法)

    本题主要考察堆叠注入,算是比较经典的一道题,在i春秋GYCTF中也出现了本题的升级版 猜测这里的MySQL语句结构应该是: select * from words where id='$inject' ...

  8. vue实现侧边导航栏

    <div class="sidebar"> <el-menu class="sidebar-el-menu" :default-active= ...

  9. ELK入门及基本使用

    预备知识-Restful 起源 在没有前后端分离概念之前,一个网站的完成总是“all in one”,在这个阶段,页面.数据.渲染全部在服务端完成,这样做的最大的弊端是后期维护,扩展极其痛苦,开发人员 ...

  10. IEDA使用Tomcat后控制台中文出现乱码

    如下图所示,Intellij IDEA显示中文为乱码, 根据Intellij IDEA控制台输出,Tomcat  Log出现乱码,因此可以将问题定位到Tomcat上,具体解决方法: 第一步:打开Tom ...