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)
    
    
    
  • 相关阅读:
    VMware Workstations Pro15.1.0并解锁Unlock3.0.2 安装黑苹果
    正则表达式对字符串匹配
    Linq操作
    C#模糊查询绑定datagridview
    wpf的datepicker处理
    动态调用webservice,不需要添加Web References
    C#调用sap接口及返回数据到sap
    C#中文件管理的运用(Twelfth Day)
    C#中继承,集合(Eleventh day)
    C#中字符串的处理,对象的引用及继承(Tenth day)
  • 原文地址:https://www.cnblogs.com/xshan/p/14193141.html
Copyright © 2011-2022 走看看