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. 10分钟搞定 Java 并发队列好吗?好的

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  2. 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知

    乔丹是我听过的篮球之神,科比是我亲眼见过的篮球之神.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免 ...

  3. 【Spring注解驱动开发】AOP核心类解析,这是最全的一篇了!!

    写在前面 昨天二狗子让我给他讲@EnableAspectJAutoProxy注解,讲到AnnotationAwareAspectJAutoProxyCreator类的源码时,二狗子消化不了了.这不,今 ...

  4. 令人蛋疼的错误提示 0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab

    原文地址:http://www.cnblogs.com/pcchinadreamfly/archive/2012/04/26/2471317.html参考地址:http://blog.csdn.net ...

  5. php反序列化总结与学习

    基础知识: 1.php类与对象 2.魔术函数 3.序列化方法 类与对象 <?php class test{ public $var = "hello world"; publ ...

  6. Activiti工作流概述

    本来打算看OCR的但是我手里有的资源是讲的PY的,涉及到CNN和RNN看得有的不太明白,捂脸,所以看看工作流吧,反正也都不会,干啥啥不会 工作流的概念 工作流的概念应该都差不多了解要不也不会搜索这个标 ...

  7. Spring security OAuth2.0认证授权学习第一天(基础概念-认证授权会话)

    这段时间没有学习,可能是因为最近工作比较忙,每天回来都晚上11点多了,但是还是要学习的,进过和我的领导确认,在当前公司的技术架构方面,将持续使用Spring security,暂不做Shiro的考虑, ...

  8. [Python]在当前目录下创建三个目录

    import os os.mkdir("2018-03-16-b018") os.mkdir("2019-03-16-b019") os.mkdir(" ...

  9. python - 模块调用

    基础 调用模块常见的两种方法 import [模块名] from [模块名] import [属性/方法] 进阶用法 调用父级目录下模块 背景介绍 目录new2(b2.py)调用上级目录new1(b1 ...

  10. 一文带你了解Sql优化

    我们后台开发人员每天都难免与数据库打交道,那么你在写sql语句的时候有注重到自己sql的效率吗?当你sql查询速度很慢的时候你有想过是你的sql语句造成的吗?看完这篇文章,我相信你会对sql优化有了一 ...