zoukankan      html  css  js  c++  java
  • API:权限,认证,限流,序列化,过滤,排序,版本,分页


    API:权限,认证,限流,序列化,过滤,排序,版本,分页



    1、APIview的使用

    • ModelViewSet是对APIview封装
    • ModelSerializer是对Serializer封装

    1.1、在user/urls.py中添加路由

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

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


    • serizlizers.ModelSerializerserializer.Serializerfield参数说明
    '''field参数'''
     1. real_only  
    # real_only = True 表示不允许用户自己上传,只能用于api的输出,序列化的时候也不用对这个数据进行验证,系列化返回是有该字段
     2. wirte_only
     # write_only = True 表示在更新或创新创建实例时可以使用该字段,但在序列化返回是不包括该字段。
     3. required:该字段是必须的,不能为空
     # required = True 反序列化(前端返回数据必须包含此字段)的时候必须提供这个字段 设置False可以不提供
     4.allow_null/all_blank: 该字段允许为null/空
     # allow_null = True 可以为null,设置False则不能为null
     5. label:标签,用于对字段的显示设置
     6. help_text: 对该字段进行解释的一段文本,用于提示
     7. style:说明该字段的类型
     8. error_messages: 该字段出错是,信息提示
    
    • 创建user/serializers.py写序列化器
    class UserInfoSerializer(serializer.Serializer):
        id = serializer.CharField(read_only=True) # 普通字段,设置id为只读字段,不能修改
        username = serializer.CharField(min_length=3,max_length=20,error_message={'required':'该字段必填'})  # 显示普通字段
        img = serializer.ImageField(required=False)
        nick_name = serializer.CharField(max_length=255)
        xxx = serializers.SerializerMethodField(read_only=True) # 自定义显示(显示多对多)
        
        class Meta:
            model = User
         
        # 自定义显示,多对多字段
        def get_xxx(selef,row):
        '''row:传过来的正是User表的对象'''
        users = row.username # 获取用户名
        return user
    
    	def create(self,validated_data):
            '''validated_data:表单或vue请求携带的json:{"username":"zhangsan"password":"123456"}'''
            return User.objects.create(**validated_data)
        
        # 定义单一字段验证的方法:
        def validate_name(self,value):
            if value =='root':
                raise serializers.ValidationError("不能创建管理员账号")
             return value
        
        # 定义多字段验证方法
        def validate(self,attrs):
            if attrs.get('username') == 'admin':
                raise serializers.ValidationError('不能创建admin用户')
             return attrs
    

    1.3、在user/views.py中添加视图函数


    from user.serializers import UserInfoSeiralizer
    
    
    class UserInfoViewSet(APIView):
        def get(self,request,*args,**kwargs):
            # 一对多、多对多查询都是一样的语法
            obj = User.objects.all()
            ser = UserInfoSerializer(instance=obj,many=True) # 关联数据多个
            # ser = UserInfoSerlializer(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.error,status=400)
        
        # 更新用户信息
        def put(self,request):
            pk = request.query_params.get('pk')
            try:
                userinfo = User.objects.get(id=pk)
            excpet Excpetion as e:
                return Response(data='用户不存在',satus=201)
            if ser.is_valid():
                ser.save()
             return Response(data=ser.error,status=400)
        
    

    2、测试接口

    2.1、查询所有用户


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

    2.2、创建用户


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

    2.3、更新用户信息


    http://192.168.56.100:8888/user/apiview/?pk=7
    

    2.4、限流功能测试


  • 相关阅读:
    tensorflow模型保存和使用08
    LSTM最基本的应用(07-3)
    手写数字识别-卷积神经网络cnn(06-2)
    python面向对象笔记
    attention机制
    dockerfile
    docker入门
    CentOS7安装Oracle11gR2
    anaconda常用的命令
    python xlrd处理表格常用方法
  • 原文地址:https://www.cnblogs.com/ml594/p/13745940.html
Copyright © 2011-2022 走看看