django序列化器
1 from django.shortcuts import render,HttpResponse 2 from rest_framework.views import APIView #引入序列化器的APIView对象 3 from .models import Student 4 from rest_framework import serializers #引入序列化器对象 5 from rest_framework.response import Response #序列化响应器,将默认格式直接徐丽华成json 6 7 # Create your views here. 8 #制定序列化器的一个类 9 class Student_Serializer(serializers.Serializer): 10 #扩展校验,validate_后面一定要和字段名称对应做判断 11 #如果扩展校验失败,直接会返回{'name': [ErrorDetail(string="名字必须以'张'开头", code='invalid')]} 12 def validate_name(self,val): 13 if val.startswith('张'): 14 return val 15 else: 16 raise serializers.ValidationError("名字必须以'张'开头") 17 #还可以将多个数据进行比较进行校验 18 ''' 19 def validate(self, attrs): 20 name = attrs['name'] 21 age = attrs['age'] 22 if name.startswith("Z") != age: 23 raise serializers.ValidationError("数据校验失败,不能录入") 24 else: 25 return attrs 26 ''' 27 28 29 30 name = serializers.CharField(max_length=100) 31 sex = serializers.BooleanField(default=1) #添加request=False就是这个字段可为空 32 age = serializers.IntegerField() 33 34 class StudentView(APIView): 35 def get(self,request): 36 student_list = Student.objects.all() 37 #1序列化模型类对象是一个字典,key:value, 38 #2序列化queryset类型是一个列表里面嵌套多个字典 39 #3 *****默认是序列化一个模型类对象,所以many是False***** 40 #4 Ser_info是一个序列化的对象 41 Ser_info = Student_Serializer(instance=student_list,many=True) 42 Ser_data = Ser_info.data 43 print(Ser_data) 44 print(type(Ser_data)) 45 print("data",request.data) 46 return Response(Ser_data)#不能在使用django的HTTPResponse,要使用序列化器响应器 47 def post(self,request): 48 #添加数据一定要先获取数据 49 50 51 52 #反序列化 53 DSer_data = Student_Serializer(data=request.data) 54 # print(type(DSer_data)) 55 print(DSer_data) 56 #反序列化会做数据校验,序列化类构件的属性必须都要进行判断,包括字段的个数和是否为空,可为空的可以不做数据校验 57 print(DSer_data.is_valid())#判断校验数据是否成功 58 print(DSer_data.errors)#校验错误信息 59 print(DSer_data.validated_data)#校验所有字段成功后的字段数据 60 61 return Response("POST") 62 63 ''' 64 序列化器建立步骤: 65 1.定义一个序列化器类,类属性名称要和数据库中的字段一一对应 66 2.构建queryset类对象 67 3.对queryset对象进行构建序列化对象 68 4.取值 69 '''
https://www.cnblogs.com/sunxiuwen/p/10020815.html 解决csrf问题