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,[]中为解析器类型
  • 相关阅读:
    [Windwos Phone 7] Accelerometer
    [Windwos Phone 7] 获取设备相关信息
    实现ZUNE上软件商城的软件星级推荐效果
    [Windows Phone 7]如何判断手机是否有网络连接
    [Windows Phone 7]UI对屏幕的自适应的处理
    [Windows Phone 7]开发分享图片的插件(2)
    [Windows Phone 7]如何导航页面和页面间传值
    windows phone 从cer中提出公钥然后再RSA加密的问题
    异步上传文件插件AjaxFileUploader在Asp.net MVC中应用
    微软认证考试分析
  • 原文地址:https://www.cnblogs.com/luck-L/p/9793197.html
Copyright © 2011-2022 走看看