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

 

posted @ 2021-01-27 23:18  伟仔技术博客  阅读(131)  评论(0编辑  收藏  举报