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,[]中为解析器类型
  • 相关阅读:
    160912、工具类:spring+springmvc自定义编码转换
    160909、Filter多方式拦截、禁用IE图片缓存、Filter设置字符编码
    160908、前端开发框架Semantic UI
    160907、CSS 预处理器-Less
    160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    160905、c3p0详细配置
    160902、Ionic、Angularjs、Cordova搭建Android开发环境
    160901、在大型项目中组织CSS
    160831、过滤器和拦截器的区别
    (转)Uiautomator——API详解
  • 原文地址:https://www.cnblogs.com/luck-L/p/9793197.html
Copyright © 2011-2022 走看看