
class StudentView2(View):
def get2(self, request):
"""序列化单条数据"""
student = Student.objects.first()
serializer = stuModelSerilizer(instance=student)
print(serializer.data)
return JsonResponse(serializer.data)
def get3(self, request):
"""序列化多条数据"""
student_list = Student.objects.all()
serializer = stuModelSerilizer(instance=student_list, many=True)
print(serializer.data)
return JsonResponse(serializer.data, safe=False)
def get4(self, request):
"""反序列化验证数据,添加操作"""
# 模拟用户传来的数据
params = {
"name": "桑德",
"age": 20,
"sex": 0,
"class_null": "a102",
"description": "难得先纷",
}
serializer = stuModelSerilizer(data=params)
serializer.is_valid(raise_exception=True)
serializer.save()
return JsonResponse(serializer.data)
def get(self, request):
"""反序列化验证数据,更新操作"""
# 模拟用户传来的数据
pk = 6
params = {
"name": "里昂",
"age": 22,
"sex": 1,
"class_null": "a104",
"description": "无妄站灭",
"user":"root",
}
student = Student.objects.get(pk=pk)
serializer = stuModelSerilizer(instance=student, data=params)
serializer.is_valid(raise_exception=True)
serializer.save()
return JsonResponse(serializer.data)
# 模型类序列化器
class stuModelSerilizer(serializers.ModelSerializer):
"""学生模型类序列化器"""
# 1.声明要转换的字段(不是模型类的字段手动添加)
user = serializers.CharField()
# 2.模型类信息
class Meta:
model = Student
fields = "__all__" # 全字段
# exclude=[]#不需要的字段
# fields=[]#需要的字段
# 字段补充声明(以此类推)
#批量指定只读字段,不需要用户上传,服务端直接返回
read_only_fields = []
# max_length等验证字段必须是序列化器的选项参数
extra_kwargs = {
"name": {
"error_messages": {
"max_length": "对不起,名字最长只能为20个字",
},
"age": {
"min_value": 0,
"max_value": 100,
"error_message": {
"min_value": "年龄不能为0或者负数",
"max_value": "年龄超过100不能使用本产品",
}
}
}
}
# 非数据库模型的字段验证,注意不保存到数据库应该raise,一旦return就会报错
def validate_user(self, data):
if data != "root":
raise serializers.ValidationError(
code="user",
detail="只有root用户才可以执行此操作",
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端