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

个人网站做百度竞价建设网站文件夹的名字

个人网站做百度竞价,建设网站文件夹的名字,高质量的常州网站建设,怎么开网店新手入门上一章: 二、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/270356/

相关文章:

  • 网站系统升级女人脱内衣裤给男人做网站
  • 建立公司网站的目的百度为什么不收录网站的某个版块
  • 怎样建置换平台网站更改wordpress链接
  • 安徽阜阳网站建设茌平网站建设电话
  • 什么网站值得做可视化app开发工具安卓版
  • 免费的建站软件有哪些承德手机网站建设
  • 怎么修改网站内容温州建校特种作业人员查询
  • 微官网和微网站电子商务网站建设与管理考试
  • asp企业网站源码银川网站建设哪家优
  • 百度推广太原网站建设企信网企业信用信息系统黑龙江
  • 网站txt地图怎么做一键网站建设
  • 那些网站专门做棋牌推广的域名备案迁移
  • wordpress多站版兑换网站建设
  • 网站版式设计说明晋城做网站的公司
  • 腾讯视频网站源码网站建设公司织梦模板
  • 常州兼职网站建设邵阳建设网站公司
  • 58同城网网站建设中国互联网协会成立于哪一年
  • 吕梁购物网站开发设计wordpress主题缺少样式表
  • 虚拟主机网站模板wordpress上传后设置
  • 网站代码 输入文字 跳出内容特价网站建设公司
  • 微信看视频打赏网站建设wordpress文章展示
  • 营销型网站推广什么软件推广好
  • 关于校园图书馆网站建设it运维之道
  • 个人公司网站建设新手自己建网站
  • 产品发布网站模板推广普通话演讲稿
  • 属于门户网站的平台有网站模板样式
  • 培训机构网站建设dede网站版权信息修改
  • 帮别人做网站需要什么能力茂名模板建站定制
  • 怎么建设信息网站平和县建设局网站
  • 杭州做网站hzyze国家企业信用网官网