当前位置: 首页 > news >正文

那些网站平台可以做3d建模建设公司起名

那些网站平台可以做3d建模,建设公司起名,图片拼接在线制作,威海住房建设局网站上一章: 二、Django REST Framework (DRF)序列化&反序列化&数据校验_做测试的喵酱的博客-CSDN博客 下一章: 五、DRF 模型序列化器ModelSerializer_做测试的喵酱的博客-CSDN博客 一、背景 1、创建请求,post,用户输入…

上一章:

二、Django REST Framework (DRF)序列化&反序列化&数据校验_做测试的喵酱的博客-CSDN博客

下一章:

五、DRF 模型序列化器ModelSerializer_做测试的喵酱的博客-CSDN博客 

一、背景

1、创建请求,post,用户输入json数据,就可以直接创建一条数据

2、更新请求,put,需要两类数据:

  1. 用户传入的json数据,具体需要更新的哪些字段。
  2. 需要先去库里取出需要更新的实例,再来对它更新。

我们现在的post 创建 与put更新请求。都是在views.py视图函数中,利用ORM框架进行的数据库操作。

创建请求,post

    # 创建班级def post(self,request):# 1、获取json参数并转化为python中的数据类型(字典)try:dic_data = json.loads(request.body)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 获取反序列化的实例对象class_obj = ClassSerializer(data=dic_data)# 对数据进行校验# 校验不通过if not class_obj.is_valid():return JsonResponse(class_obj.errors, status=400)# 创建数据,执行saqlmiaoclass = MiaoClass.objects.create(**class_obj.validated_data)# 对创建的数据进行数据回显(序列化)serializer = ClassSerializer(instance=miaoclass)return JsonResponse(serializer.data, status=201)

更新请求,put:

  def put(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj = MiaoStudent.objects.get(id=pk)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 3、获取json参数并转化为字典try:dic = json.loads(request.body)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 4、序列化,将 用户输入的字典,转化为序列化实例serializer_obj=StudentSerializer(data=dic)# 5、序列化器对用户传入的参数进行校验# is_valid() 数据校验# serializer_obj.errors 校验后报错信息if not serializer_obj.is_valid():return JsonResponse(serializer_obj.errors, status=400)# 6、更新数据,操作数据库student_obj.sname = serializer_obj.validated_data.get('sname')student_obj.sgender = serializer_obj.validated_data.get('sgender')student_obj.sid = serializer_obj.validated_data.get('sid')student_obj.sscore = serializer_obj.validated_data.get('sscore')student_obj.classid_id = serializer_obj.validated_data.get('classid_id')student_obj.save()# 7、数据回显示(非必需的)。将读取的项目数据转化为字典serializer = StudentSerializer(instance=student_obj)return JsonResponse(serializer.data, status=201)

二、序列化器create方法与update方法

上面处理 数据库操作,是在views视图函数中进行的,现在

将操作数据库的行为 封装到 序列化器类中。

post create创建操作,通过序列化器create 方法实现

put update更新操作,通过序列化器update方法实现。

2.1 序列化器create方法

原post 创建请求


class StudentsView(View):# 查询所有数据def get(self,request):# 获取列表数据queryset = MiaoStudent.objects.all()print(queryset)serializer = StudentSerializer(instance=queryset, many=True)return JsonResponse(serializer.data, safe=False)# 创建数据def post(self, request):# 1、获取json参数并转化为python中的数据类型(字典)try:dic_data = json.loads(request.body)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 获取反序列化的实例对象student_serializer_obj = StudentSerializer(data=dic_data)# 对数据进行校验# 校验不通过if not student_serializer_obj.is_valid():return JsonResponse(student_serializer_obj.errors, status=400)# 创建数据,执行saqlstudent=MiaoStudent.objects.create(**student_serializer_obj.validated_data)# 对创建的数据进行数据回显(序列化)serializer = StudentSerializer(instance=student)return JsonResponse(serializer.data, status=201)

1、将原有的创建数据的代码

# 创建数据,执行saqlstudent=MiaoStudent.objects.create(**student_serializer_obj.validated_data)

替换成

        # 创建数据,执行saql# student=MiaoStudent.objects.create(**student_serializer_obj.validated_data)# 通过序列化器操作数据库student_serializer_obj.save()# 对创建的数据进行数据回显(序列化)#serializer = StudentSerializer(instance=student)return JsonResponse(student_serializer_obj.data, status=201)

当构建序列化器对象时,只传入data= 参数。

       # 获取反序列化的实例对象student_serializer_obj = StudentSerializer(data=dic_data)

序列化器再调用save方法时,实际调用的是序列化器中的create方法。(根据创建对象时,传入的参数,来判断执行save方法时,具体调用create方法还是update方法。

构建序列化器实例时,只传 data= ,调用save时,调用的是create方法。

构建序列化器实例时,同时传 data= 与instance=,调用save时,调用的是update方法。

2、在序列化器中,创建create方法

    def create(self, validated_data: dict):project_obj = MiaoStudent.objects.create(**validated_data)return project_obj

将执行数据库的操作,放到create方法中。

其中:

  1. validated_data: dict 为,经过校验之后,获取的用户输入数据,时一个字典。

3、save方法关键字传参

执行save方法。

student_serializer_obj.save()

用户输入的是哪些字段,则在操作数据库时,就使用的哪些字段。

实现功能:

我不仅要获取用户输入的哪些字段,我还要在程序上额外加一些我想要加的字段。

可以通过 

.save(关键字1:"值1",关键字2:"值2")

传入。

create方法,获取,经过校验的用户传入validated_data,是一个字典。这个字典就包含我们刚刚额外传入的数据。

举例:

调用save时传入

student_serializer_obj.save(address="北京",hobby="play")

执行create方法,取出额外数据。

    def create(self, validated_data: dict):address = validated_data.pop("address")hobby = validated_data.pop("address")                  project_obj = MiaoStudent.objects.create(**validated_data)return project_obj

2.2 序列化器update方法

views视图中,put 原来的代码

    def put(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj = MiaoStudent.objects.get(id=pk)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 3、获取json参数并转化为字典try:dic = json.loads(request.body)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 4、序列化,将 用户输入的字典,转化为序列化实例serializer_obj=StudentSerializer(data=dic)# 5、序列化器对用户传入的参数进行校验# is_valid() 数据校验# serializer_obj.errors 校验后报错信息if not serializer_obj.is_valid():return JsonResponse(serializer_obj.errors, status=400)# 6、更新数据,操作数据库student_obj.sname = serializer_obj.validated_data.get('sname')student_obj.sgender = serializer_obj.validated_data.get('sgender')student_obj.sid = serializer_obj.validated_data.get('sid')student_obj.sscore = serializer_obj.validated_data.get('sscore')student_obj.classid_id = serializer_obj.validated_data.get('classid_id')student_obj.save()# 7、数据回显示(非必需的)。将读取的项目数据转化为字典serializer = StudentSerializer(instance=student_obj)return JsonResponse(serializer.data, status=201)

1、视图函数:创建序列化实例时,使用data= , instance=

student_obj = MiaoStudent.objects.get(id=pk)
dic = json.loads(request.body)
serializer_obj = StudentSerializer(data=dic, instance=student_obj)

修改后视图函数的整体代码


class StudentsDetailView(View):def get(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj = MiaoStudent.objects.get(id=pk)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)serializer = StudentSerializer(instance=student_obj)return JsonResponse(serializer.data)def put(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj = MiaoStudent.objects.get(id=pk)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 3、获取json参数并转化为字典try:dic = json.loads(request.body)except Exception as e:return JsonResponse({'msg': '参数有误'}, status=400)# 4、序列化,将 用户输入的字典,转化为序列化实例# serializer_obj=StudentSerializer(data=dic)serializer_obj = StudentSerializer(data=dic, instance=student_obj)# 5、序列化器对用户传入的参数进行校验# is_valid() 数据校验# serializer_obj.errors 校验后报错信息if not serializer_obj.is_valid():return JsonResponse(serializer_obj.errors, status=400)# 6、更新数据,操作数据库# student_obj.sname = serializer_obj.validated_data.get('sname')# student_obj.sgender = serializer_obj.validated_data.get('sgender')# student_obj.sid = serializer_obj.validated_data.get('sid')# student_obj.sscore = serializer_obj.validated_data.get('sscore')# student_obj.classid_id = serializer_obj.validated_data.get('classid_id')# student_obj.save()serializer_obj.save()# 7、数据回显示(非必需的)。将读取的项目数据转化为字典# serializer = StudentSerializer(instance=student_obj)return JsonResponse(serializer_obj.data, status=201)

2、序列化器中update方法

    def update(self, instance, validated_data: dict):# for key, value in validated_data.items():#     setattr(instance, key, value)# validated_data 是经过校验后,用户传入的数据instance.sname = validated_data.get('sname') or instance.snameinstance.sgender = validated_data.get('sgender') or instance.sgenderinstance.sid = validated_data.get('sid') or instance.sidinstance.sage = validated_data.get('sage') or instance.sageinstance.sscore = validated_data.get('sscore') or instance.sscoreinstance.classid_id = validated_data.get('classid_id') or instance.classid_idinstance.save()return instance
  1. or 是对值为空时的处理

http://www.yayakq.cn/news/625676/

相关文章:

  • 简述网站开发基本流程著名网站设计
  • 做公司网站按年收费租房
  • 有哪些手机网站网站网页设计的意义
  • 四川做网站公司教务管理系统密码忘记了怎么找回
  • 聊城有什么网站制作公司免费网站建设 免备案
  • 建设网站的步骤知乎网站怎么做响应
  • 永年县网站做公司官网怎么做
  • 专业苏州网站建设公司久久建筑网官网登录
  • 合肥公司制作网站的先学php还是网站建设
  • 如何查看网站是否被k产品网站设计论文
  • 网站开发客户需求文档电子商务网站概要设计
  • 创建众筹网站航拍类wordpress模板
  • 北控京奥建设有限公司网站网站建设 甘肃
  • 广州网站建设费品牌设计案例网站
  • 筑云网站投诉做网站需要哪几个板块
  • 网站推广公司排名网页制作公司的职员
  • 学校学院网站建设意义敬请期待造句
  • 宠物发布网站模板如何知道一个网站的流量
  • 网站建设客户怎么找网站地址栏图标制作
  • 福州 网站设计网站正能量点进去就能看
  • 湖南企业网站关于实验室建设的英文网站
  • 用ps做的网站怎么发布学习aspmvc网站开发 书
  • 做健身网站步骤视觉设计的特点和优势
  • 家装效果图设计网站电商网站流程
  • 宿迁明远建设有限公司网站小说网站开发源码
  • 自己创建网站怎么赚钱注册企业在哪个网站
  • 网站开发运营软装设计的意义
  • 微信微网站怎么做展馆设计论文
  • 网站建设管理招聘网站域名解析怎么做
  • 电商网站设计与制作个人网站模板设计步骤