一.新增数据的create方法
1.serializers.py代码示例
from rest_framework import serializers
from student import models
class StudentSerializer(serializers.Serializer):
name = serializers.CharField(max_length=8,required=True)
age = serializers.IntegerField(max_value=120,required=True)
sex = serializers.IntegerField(default=1)
def validate_name(self,attr):
if attr == "老王":
raise serializers.ValidationError('隔壁老王不能进')
return attr
def validate(self, attrs):
if attrs.get('name') == "张三" and attrs.get('age') == 26:
raise serializers.ValidationError('26岁的张三不能进')
return attrs
def create(self, validated_data):
stu_data = models.Student.objects.create(**validated_data)
return stu_data
2.views.py代码示例:
from django.views import View
from django.http import HttpResponse
from unsers.serializers import StudentSerializer
from student import models
import json
# Create your views here.
class StudentView(View):
def post(self,request):
data = json.loads(request.body)
#将序列化的数据传入定义的反序列化类中,用data参数接收
serializers = StudentSerializer(data=data)
serializers.is_valid(raise_exception=True) #raise_exception=True该参数可以在校验失败时,直接报错
serializers.save() #在校验通过时,会直接执行StudentSerializer类中的create方法
return HttpResponse('ok')
2.修改数据的update方法:
serializers.py代码示例:
from rest_framework import serializers
from student import models
class StudentSerializer(serializers.Serializer):
name = serializers.CharField(max_length=8,required=True)
age = serializers.IntegerField(max_value=120,required=True)
sex = serializers.IntegerField(default=1)
def validate_name(self,attr):
if attr == "老王":
raise serializers.ValidationError('隔壁老王不能进')
return attr
def validate(self, attrs):
if attrs.get('name') == "张三" and attrs.get('age') == 26:
raise serializers.ValidationError('26岁的张三不能进')
return attrs
def create(self, validated_data):
stu_data = models.Student.objects.create(**validated_data)
return stu_data
def update(self, instance, validated_data):
for key, value in validated_data.items():
setattr(instance, key, value)
instance.save()
return instance
views.py代码示例:
from django.views import View
from django.http import HttpResponse
from unsers.serializers import StudentSerializer
from student import models
import json
class StudentView(View):
def post(self,request):
data = json.loads(request.body)
serializers = StudentSerializer(data=data)
serializers.is_valid(raise_exception=True)
serializers.save()
return HttpResponse('ok')
def put(self,request):
data = json.loads(request.body)
id = data.get('id')
stu_obj = models.Student.objects.get(id=id)
serializers=StudentSerializer(instance=stu_obj,data=data)
serializers.is_valid(raise_exception=True)
serializers.save()
return HttpResponse('ok')
如果序列化类嵌套,且表关系比较复杂时,序列化的嵌套类,也需要改动
serializers.py的代码示例
from rest_framework import serializers
from student import models
class RolesSerializer(serializers.ModelSerializer):
'''角色表序列化类'''
class Meta:
model = models.Role
fields = ['id','name']
extra_kwargs={
"id":{"read_only":False},
"name":{"read_only":True}
}
class DepartSerializer(serializers.ModelSerializer):
'''部门表序列化类'''
class Meta:
model = models.Depart
fields = ["id","title"]
extra_kwargs = {
"id": {"read_only": False},
"title": {"read_only": True}
}
class UserSerializer(serializers.ModelSerializer):
'''用户表序列化类'''
sex_text = serializers.CharField(source="get_sex_display")
depart = DepartSerializer()
roles = RolesSerializer(many=True)
class Meta:
model = models.UserInfo
fields = ["username","password",'email',"sex_text","roles","depart"]
def create(self, validated_data):
'''
如果添加数据,在保存的时候,会执行该方法
所以添加数据的逻辑,都应该写在这个方法中
:param validated_data: 该参数中包含用户所提交的所有数据,数据为字典类型
:return:
'''
pass
def update(self, instance, validated_data):
'''
如果更新数据,在保存的时候,会执行该方法
所以更新某一条数据的逻辑,都应该写在这个方法中
:param instance: 被更新的数据对象
:param validated_data: 该参数中包含用户所提交的所有数据,数据为字典类型
:return:
'''
pass
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通