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,[]中为解析器类型
  • 相关阅读:
    学英语舌尖效应(转)
    winform程序防止重复运行
    label字符自动换行(转自网络)
    C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
    三极管开关电路设计(转)
    ASPNET+ArcGIS+Flex初次使用笔记
    转:oracle日期函数集锦
    网站开发人员应该知道的62件事
    cassandra的安装与使用
    datejs一个很好用的时间日期JavaScript组件
  • 原文地址:https://www.cnblogs.com/luck-L/p/9793197.html
Copyright © 2011-2022 走看看