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

制作网站公寻找锦州网站建设

制作网站公,寻找锦州网站建设,兴化市住房和城乡建设局网站,快速做网站的方法Django rest_framework Serializer中的create、Views中的create/perform_create的区别 对于后端来说#xff0c;前后端分离的方式能让前后端的开发都爽。和所有的爽一样#xff0c;每爽一次都要付出一定的代价。而前后端分离的代价#xff0c;就是后端要面对巨量的模块化的功…Django rest_framework Serializer中的create、Views中的create/perform_create的区别 对于后端来说前后端分离的方式能让前后端的开发都爽。和所有的爽一样每爽一次都要付出一定的代价。而前后端分离的代价就是后端要面对巨量的模块化的功能组件以及这些组件的常规用法与重写复用。有一点经验关于[Django rest_framework ] Serializer中的create()、Views中的create()/perform_create()的区别希望与诸君共讨之。 1 Serializer 序列化器 1.1 Serializer作用 序列化器是rest_framework 其中的一个组件它有两个功能 序列化把python中的对象转成json/xml格式字符串。这里的对象指的是数据库对象因为rest_framework 用的ORM来操作数据库。它的功能直观上是将数据库里面的数据通过接口传递到前端因为使用ORM的缘故从数据库到接口数据转换的过程被描述成序列化其实更准确的描述应该是[可传输化]或者[转化为可以被前端直接使用的数据类型]这样更便于理解。反序列化把json/xml格式字符串转成python中的对象。从功能上来说反序列化是序列化的逆过程。但同样的从英语到汉语直译的方式总会带来各种理解上的障碍。更准确地描述应该是[字符串对象化]或者[可存储化]。 和前后端不分离相比Serializer承担了一部分views 2.2 Serializer中的create 序列化()的过程一般是read操作绝大多数情况下应该不涉及使用create()。所以Serializer重写create()的情况只能是反序列化(字符串----数据库)也就是将接口数据保存到数据库中。 Serializers中的create()方法 from rest_framework import serializersclass MyModelSerializer(serializers.ModelSerializer):一个序列化器class Meta:model MyModelfields __all__# Serializers中的create()方法def create(self, validated_data):## your codereturn super().create(validated_data)上面的这一小段代码是一个典型的序列化器在这里我们重写了Serializer的create()。可以看到在这里的create()方法有一个validated_data参数这意味着什么呢我想聪明的你已经猜到了答案即这个数据是从前端传过来并且已经过了验证(valide)。经过了谁的验证呢没错是Serializer。可能许多人还记得Serializer提供了很多字段类似models中的字段当时我还在想我说这玩意儿是用来干嘛的呢。现在回首我想很多人像我一样也已豁然开朗。记着永远不要忘记Serializer的功能。举个例子 from rest_framework import serializersclass MyModelSerializer(serializers.ModelSerializer):一个序列化器class Meta:model MyModelfields __all__# Serializers中的create()方法def create(self, validated_data):## your codereturn super().create(validated_data)# 定义的一个字段my_bool BooleanField()上面我定义了一个字段my_bool 。这个字段可接受的值是一个布尔值0/1。如果传其他值则会报错。那么很明显的Serializer中重写create()方法的作用已然显现对Serializer已校验的前端入参进行二次处理。默认情况下serializer处理结束后将会返回一个示例instance给视图(这一点存疑)。 到此Serializer的作用应该是结束了。 2 Views 视图 Serializer将校验成功的数据给到viewsviews拿到数据之后用来做持久化。 2.1 views中的create()与perform_create() 在views中你可以重写create()并通过request.GET/request.POS/request.data拿到从前端传过来并经过Serializer规则校验的数据。 拿到之后呢你可以对这些数据再次进行处理或者将它作为调用其它接口的入参(这就是传说中的对其它系统的接口进行二次封装)。 视图中的create()与序列化器中的create()有一个巨大的区别是视图中的create()可以调用perform_create()进行持久化。这很棒棒因为后端开发说白了就是对数据库进行增删改查(撇开使用不同框架的差异)而增删改查的难易程度事实上取决于你要解决的问题即实际具体业务的复杂程度。 3 总结一下 Serializer主要是和前端打交道so基于这一点你重写Serializer的create()本质是为了过滤。如果通过了校验并且满足你的要求那么它会到视图中做下一步处理(通过过滤)反之将会给前端反馈一些提示信息过去(被过滤)。Views则相反Views主要和后端打交道你重写Views的create()本质是为了持久化。在持久化之前你可以对入参做任何符合实际情况的处理(包括调用其它接口)但是因为是POST/create()最终你还是要持久化(perform_create())。 以上 。
http://www.hkea.cn/news/14428886/

相关文章:

  • 大气的网站设计企业咨询公司收费标准
  • 太原市建设北路小学网站如何编写代码
  • seo建站公司推荐什么是网站解析
  • 网站网络推广企业西安网站公司排名
  • 如何把自己电脑做网站服务器吗可不可以异地建设网站
  • 电商网站制作案例免费wordpress cms主题
  • 陵水网站建设网络营销外包总代理
  • 成都科技网站建设电话多少西安做网络推广的
  • 网站 服务 套餐网站 编码文档
  • 常德网站建设详细策划石狮网站建设制作
  • 网站管理建设总结在哪做网站关键词
  • 河南安阳市滑县网站seo优化有哪些
  • 自己建设网站怎么挣钱上海松江品划做网站
  • 手机建站平台哪个便宜python如何创建网页
  • 济南百度整站seo推广电商数据分析怎么做
  • 中文企业网站模板下载有什么wordpress
  • 买空间的网站好网站开发人员 组织架构
  • 辽宁住房和城乡建设部网站怎么在百度上做推广
  • 网站制作与建设教程下载网站建设和数据容量整合
  • 如何做装修网站wordpress支持的语言包
  • 服装网站建设企业需求调查金融做市场广告挂哪些网站
  • 网络软文推广网站好的建站平台
  • 网站建设费开票收候开在哪个类别里模仿一个网站建设多少钱
  • 巨鹿县住房与城乡建设厅网站学做网站要懂英语吗
  • 无锡做网站的wordpress媒体插件
  • 登不上建设企业网站wordpress哪里编辑页脚
  • 外贸soho 网站建设企业门户网站建设信息
  • 程序员做的导航网站如何找百度做网站
  • 如何查询自己的网站是否被收录做app用什么软件
  • saas建站平台有哪些佛山宽屏网站建设