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

企业网站建设实训小结金融类网站源码

企业网站建设实训小结,金融类网站源码,短视频seo关键词,海南平台网站建设企业上一章#xff1a; 二、Django REST Framework (DRF)序列化反序列化数据校验_做测试的喵酱的博客-CSDN博客 下一章#xff1a; 五、DRF 模型序列化器ModelSerializer_做测试的喵酱的博客-CSDN博客 一、背景 1、创建请求#xff0c;post#xff0c;用户输入…上一章 二、Django REST Framework (DRF)序列化反序列化数据校验_做测试的喵酱的博客-CSDN博客 下一章 五、DRF 模型序列化器ModelSerializer_做测试的喵酱的博客-CSDN博客  一、背景 1、创建请求post用户输入json数据就可以直接创建一条数据 2、更新请求put需要两类数据 用户传入的json数据具体需要更新的哪些字段。需要先去库里取出需要更新的实例再来对它更新。 我们现在的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: 参数有误}, status400)# 获取反序列化的实例对象class_obj ClassSerializer(datadic_data)# 对数据进行校验# 校验不通过if not class_obj.is_valid():return JsonResponse(class_obj.errors, status400)# 创建数据执行saqlmiaoclass MiaoClass.objects.create(**class_obj.validated_data)# 对创建的数据进行数据回显序列化serializer ClassSerializer(instancemiaoclass)return JsonResponse(serializer.data, status201) 更新请求put def put(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj MiaoStudent.objects.get(idpk)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 3、获取json参数并转化为字典try:dic json.loads(request.body)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 4、序列化将 用户输入的字典转化为序列化实例serializer_objStudentSerializer(datadic)# 5、序列化器对用户传入的参数进行校验# is_valid() 数据校验# serializer_obj.errors 校验后报错信息if not serializer_obj.is_valid():return JsonResponse(serializer_obj.errors, status400)# 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(instancestudent_obj)return JsonResponse(serializer.data, status201)二、序列化器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(instancequeryset, manyTrue)return JsonResponse(serializer.data, safeFalse)# 创建数据def post(self, request):# 1、获取json参数并转化为python中的数据类型字典try:dic_data json.loads(request.body)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 获取反序列化的实例对象student_serializer_obj StudentSerializer(datadic_data)# 对数据进行校验# 校验不通过if not student_serializer_obj.is_valid():return JsonResponse(student_serializer_obj.errors, status400)# 创建数据执行saqlstudentMiaoStudent.objects.create(**student_serializer_obj.validated_data)# 对创建的数据进行数据回显序列化serializer StudentSerializer(instancestudent)return JsonResponse(serializer.data, status201)1、将原有的创建数据的代码 # 创建数据执行saqlstudentMiaoStudent.objects.create(**student_serializer_obj.validated_data) 替换成 # 创建数据执行saql# studentMiaoStudent.objects.create(**student_serializer_obj.validated_data)# 通过序列化器操作数据库student_serializer_obj.save()# 对创建的数据进行数据回显序列化#serializer StudentSerializer(instancestudent)return JsonResponse(student_serializer_obj.data, status201) 当构建序列化器对象时只传入data 参数。 # 获取反序列化的实例对象student_serializer_obj StudentSerializer(datadic_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方法中。 其中 validated_data: dict 为经过校验之后获取的用户输入数据时一个字典。 3、save方法关键字传参 执行save方法。 student_serializer_obj.save() 用户输入的是哪些字段则在操作数据库时就使用的哪些字段。 实现功能 我不仅要获取用户输入的哪些字段我还要在程序上额外加一些我想要加的字段。 可以通过  .save(关键字1:值1,关键字2:值2) 传入。 create方法获取经过校验的用户传入validated_data是一个字典。这个字典就包含我们刚刚额外传入的数据。 举例 调用save时传入 student_serializer_obj.save(address北京,hobbyplay) 执行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(idpk)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 3、获取json参数并转化为字典try:dic json.loads(request.body)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 4、序列化将 用户输入的字典转化为序列化实例serializer_objStudentSerializer(datadic)# 5、序列化器对用户传入的参数进行校验# is_valid() 数据校验# serializer_obj.errors 校验后报错信息if not serializer_obj.is_valid():return JsonResponse(serializer_obj.errors, status400)# 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(instancestudent_obj)return JsonResponse(serializer.data, status201) 1、视图函数创建序列化实例时使用data , instance student_obj MiaoStudent.objects.get(idpk) dic json.loads(request.body) serializer_obj StudentSerializer(datadic, instancestudent_obj) 修改后视图函数的整体代码 class StudentsDetailView(View):def get(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj MiaoStudent.objects.get(idpk)except Exception as e:return JsonResponse({msg: 参数有误}, status400)serializer StudentSerializer(instancestudent_obj)return JsonResponse(serializer.data)def put(self, request, pk):# 1、需要校验pk在数据库中是否存在# 2、从数据库中读取项目数据try:student_obj MiaoStudent.objects.get(idpk)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 3、获取json参数并转化为字典try:dic json.loads(request.body)except Exception as e:return JsonResponse({msg: 参数有误}, status400)# 4、序列化将 用户输入的字典转化为序列化实例# serializer_objStudentSerializer(datadic)serializer_obj StudentSerializer(datadic, instancestudent_obj)# 5、序列化器对用户传入的参数进行校验# is_valid() 数据校验# serializer_obj.errors 校验后报错信息if not serializer_obj.is_valid():return JsonResponse(serializer_obj.errors, status400)# 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(instancestudent_obj)return JsonResponse(serializer_obj.data, status201) 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 or 是对值为空时的处理
http://www.hkea.cn/news/14293018/

相关文章:

  • 个人介绍网页制作苏州推广关键词优化
  • 怎样做问卷网站wordpress wp_enqueue_script
  • 建设银行网站首页外贸网站镜像
  • html php网站开发报告建立个人网站能赚钱吗
  • 什么是网络营销策划书网站怎样做优化网页
  • 站长之家whois网站域名续费后SEO查询未更换
  • 不忘初心网站建设获取网站域名
  • 香格里拉网站建设直接做那个视频网站
  • 建设网站前的市场分析包括哪些内容哪个网站做漫画可以有钱
  • 请问哪个网站可以做当地向导手机软件开发培训班
  • 网站建设如何工作vi设计是设计什么东西
  • 网站建设先有域名然后呢做美食哪些类型网站
  • 汕头高端模板建站网站建设 地址 上海石门二路
  • 做彩票网站程序违法吗h5企业网站定制排名
  • 鞍山市住房和城乡建设网站想要注册一个公司网站怎么做
  • 互动网站策划邯郸网络宣传公司
  • 建立自己的网站有什么用个人备案域名可以做哪些网站吗
  • 网站集约建设后网站域名规范域名不用了需要注销吗
  • 时间管理系统 网站开发安卓软件免费下载
  • 石家庄科技中心网站做医疗信息网站的域名
  • 做静态网站郑州app开发制作
  • 电脑在哪网站接做扇子单上海专业制作网页
  • 商城软件下载seo 关键词优化
  • 做美剧盗版网站怎样修改网站标题
  • 上海保洁服务网站建设招生网站怎么做
  • 做电工的有接单的网站吗常见的域名
  • 沧州专业网站建设公司网站制作加我
  • 网站制作与网站建设应用大全网站
  • 网站更换名称需要重新备案吗淄博那里有做网站的
  • 做购物比价的网站网站快速收录的方法