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问题