zoukankan      html  css  js  c++  java
  • 序列化(一)

    序列化的作用

    • 用来序列化数据。ORM->JSON
    • 用来验证表单数据。Form
    • 可以创建数据,修改数据等。

    Serializer的构造函数的参数:

    • instance:需要传递一个ORM对象,或者是一个queryset对象。用来将ORM模型序列化成JSON的
    • data:把需要验证的数据传给data,用来验证这些数据是不是符合要求。
    • many:如果instance是一个queryset对象,那么就需要设置为True,否则为False

    自定义验证、创建、修改数据

    • 复写update、create方法。要在update方法中使用instance.save()进行保存。
    • 通过重写validate(self,attrs)方法进行验证。attrs中包含了所有字段。如果验证不通过,那么调用raise serializer.ValidationError('error')即可。
    • 当只针对单个字段验证时可以定义def validate_要验证字段的名(self,value)方法
    class MerchantSerializer(serializers.Serializer):
        id = serializers.IntegerField(read_only=True)
        name = serializers.CharField(max_length=200,required=True,error_messages={"required":"name必须要传!"})
        logo = serializers.CharField(max_length=200,required=True)
        address = serializers.CharField(max_length=200,required=True)
        notice = serializers.CharField(max_length=200,required=False)
        up_send = serializers.DecimalField(required=False,max_digits=6,decimal_places=2)
        lon = serializers.FloatField(required=True)
        lat = serializers.FloatField(required=True)
    
        def validate(self,attrs):
            raise serializer.ValidationError('验证失败')
    
        def validate_name(self,value):
            raise serializer.ValidationError('验证失败')
    
        def update(self, instance, validated_data):
            instance.name = validated_data.get('name',instance.name)
            instance.logo = validated_data.get('logo', instance.logo)
            instance.address = validated_data.get('address', instance.address)
            instance.notice = validated_data.get('notice',instance.notice)
            instance.up_send = validated_data.get('up_send', instance.up_send)
            instance.lon = validated_data.get('lon', instance.lon)
            instance.lat = validated_data.get('lat', instance.lat)
            instance.save()
            return instance
    
        def create(self, validated_data):
            return Merchant.objects.create(**validated_data)
    
    from .serializers import MerchantSerializer,GoodsCategorySerializer
    from django.http import JsonResponse
    from django.views.decorators.http import require_http_methods
    from meituan.models import Merchant,GoodsCategory,Goods
    from rest_framework.response import Response
    
    @require_http_methods(['GET','POST'])
    def merchant(request):
        # get:返回所有的商家
        # post:创建新的商家
        if request.method == 'GET':
            queryset = Merchant.objects.all()
            serializer = MerchantSerializer(instance=queryset,many=True)
            return JsonResponse(serializer.data,status=200,safe=False)
        else:
            serializer = MerchantSerializer(data=request.POST)
            if serializer.is_valid():
                serializer.save()
                return JsonResponse(serializer.data, status=200)
            else:
                return JsonResponse(serializer.errors, status=400)
    
    def category(request):
        if request.method == 'GET':
            queryset = GoodsCategory.objects.all()
            serializer = GoodsCategorySerializer(instance=queryset,many=True)
            return JsonResponse(serializer.data,safe=False)
        else:
            serializer = GoodsCategorySerializer(data=request.POST)
            if serializer.is_valid():
                serializer.save()
                return JsonResponse(serializer.data,status=200)
            else:
                return JsonResponse(serializer.errors, status=400)
    
    
    
  • 相关阅读:
    使用PowerDesigner 15对现有数据库进行生成图表结构
    dynamic的使用
    js 字符串的replace() 方法和实现replaceAll() 方法
    学习新属性 requestAnimationFrame
    Mapbox 地图样式规范
    Emmet插件使用方法总结
    js循环遍历性能
    lunix部署其前端项目常见报错
    componentWillMount和componentDidMount的区别
    控制浏览器禁止缓存
  • 原文地址:https://www.cnblogs.com/xshan/p/14193141.html
Copyright © 2011-2022 走看看