zoukankan      html  css  js  c++  java
  • 序列化组件与解析器

    rest-framework之ModelSerializer

    class BookSerializers(serializers.ModelSerializer):
        class Meta:
            model = models.Book
            # fields = "__all__"
            fields=['nid','title','authors','publish']
            # exclude=('nid',)   #不能跟fields同时用
            # depth = 1    #深度控制,写 往里拿几层,层数越多,响应越慢,官方建议0--10之间,个人建议最多3层
        publish=serializers.SerializerMethodField()
        def get_publish(self,obj):
            return obj.publish.name
        authors=serializers.SerializerMethodField()
        def get_authors(self,obj):
            ret=obj.authors.all()
            ss=AuthorSerializer(ret,many=True)
            return ss.data
    

    序列化组件之请求数据校验和保存功能

    class BookSerializers(serializers.ModelSerializer):
        class Meta:
            model=Book
            fields="__all__"
            
        title = serializers.CharField(error_messages={'required': '标题必填'})
    
        def validate_title(self, value):  # 局部钩子
            from rest_framework.exceptions import ValidationError
            if value.isdigit():
                raise ValidationError('不能是数字')
            return value
    
        def validate(self, attrs):  # 全局钩子
            from rest_framework.exceptions import ValidationError
            if attrs.get('title') == attrs.get('publish'):
                raise ValidationError('书名与出版社不能相同')
            return attrs
    
    #————————
    class BookView(APIView):
    
        def post(self, request):
    
            # 添加一条数据
            print(request.data)
    
            bs=BookSerializers(data=request.data)
            if bs.is_valid():
                bs.save()  # 生成记录
                return Response(bs.data)
            else:
    
                return Response(bs.errors)
    

    解析器

    解析器的作用

    根据请求头 content-type 选择对应的解析器对请求体内容进行处理。
    
    有application/json,x-www-form-urlencodedform-data等格式
    

    全局解析器

    setting里

    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES':[
            'rest_framework.parsers.JSONParser'
            'rest_framework.parsers.FormParser'
            'rest_framework.parsers.MultiPartParser'
        ]
    }
    

    局部解析器

    class TestView(APIView):
        parser_classes = [JSONParser, ]  # 名字必须为parser_classes,[]中为解析器类型
  • 相关阅读:
    从jvm的角度来看java的多线程
    jvm常用优化方案和方法
    JVM GC 机制与性能优化
    JVM 类加载机制详解
    (转)Java 详解 JVM 工作原理和流程
    Callable,Runnable异同
    使用Toast进行用户提醒(转)
    学好Java只需要做到这7点,年薪20W起步
    C# 之泛型详解
    C#中的委托和事件
  • 原文地址:https://www.cnblogs.com/luck-L/p/9793197.html
Copyright © 2011-2022 走看看