• APIview使⽤


    https://www.cnblogs.com/xiaonq/p/10124104.html

    https://www.cnblogs.com/xiaonq/p/10987889.html

    ModelViewSet 是对 APIView 封装

    ModelSerializer 是对 Serializer

    1.1user/urls.py中添加路由

    urlpatterns = [
    
     path('apiview/', views.UserInfoViewSet.as_view()),
    
    ]
    

    1.2 创建user/serializers.py写序列化器

    serializers.ModelSerializer 和 serializers.Serializer fifield参数说明

    ''' field参数 '''
    # 1.read_only
    read_only=True 表示不允许⽤户⾃⼰上传,只能⽤于api的输出,序列化的时候也不⽤对这个数据进⾏
    验证,序列化返回是有改字段
    # 2.write_only
    write_only=True 表示在更新或创建实例时可以使⽤该字段,但在序列化返回时不包括该字段。
    # 3.required:该字段是必需的,不能为空
    required=True 反序列化(前端返回数据必须包含此字段)的时候必须提供这个字段 设置False 可
    以不提供
    # 4.allow_null/allow_blank:该字段允许为null/空
    allow_null=True 可以为null 设置False则不能为null
    # 5.label:标签,⽤于对字段显示设置
    # 6.help_text:对字段进⾏解释的⼀段⽂本,⽤于提示
    # 7.style:说明字段的类型
    # 8.error_messages:字段出错时,信息提示
    

    创建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)
     
     class Meta:
     model = User
     
     # 定义创建语法: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_username(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.3user/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)
    

    2.序列化正向反向查询

    https://www.cnblogs.com/xiaonq/p/10987889.html#i3

    3.测试接口

    3.1查询所有用户

    http://192.168.56.100:8888/user/apiview/

  • 相关阅读:
    起步X5 UI模型使用的新的JAVASCRIPT UI库 DHTMLX (简称DHX)
    行车记录仪
    牛客网——华为机试(题9:提取不重复的整数)(Java)
    牛客网——华为机试(题8:合并表记录)(Java)
    牛客网——华为机试(题7:取近似值)(Java)
    牛客网——华为机试(题6:质数因子)(Java)
    牛客网——华为机试(题5:进制转换)(Java)
    牛客网——华为机试(题4:字符串分隔)(Java)
    牛客网——华为机试(题2:计算字符个数)(Java)
    牛客网——华为机试(题1:字符串最后一个单词的长度)(Java)
  • 原文地址:https://www.cnblogs.com/li-xiao-yang/p/13887590.html
Copyright © 2020-2023  润新知