Django rest_framework Serializer中的create、Views中的create/perform_create的区别

这篇具有很好参考价值的文章主要介绍了Django rest_framework Serializer中的create、Views中的create/perform_create的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的功能,也就是业务逻辑

1.2 Serializer中的create

序列化的过程一般是read操作,绝大多数情况下应该不涉及使用create()。所以Serializer重写create()的情况只能是反序列化(字符串---->数据库),也就是将接口数据保存到数据库中。

  • Serializers中的create()方法

    
    from rest_framework import serializers
    
    class MyModelSerializer(serializers.ModelSerializer):
    	"""
    	一个序列化器
    	"""
        class Meta:
            model = MyModel
            fields = '__all__'
    
    	# Serializers中的create()方法
        def create(self, validated_data):
            ## your code
            return super().create(validated_data)
    

    上面的这一小段代码,是一个典型的序列化器,在这里我们重写了Serializer的create()。可以看到在这里的create()方法有一个validated_data参数,这意味着什么呢,我想聪明的你已经猜到了答案:即这个数据是从前端传过来并且已经过了验证(valide)。经过了谁的验证呢,没错,是Serializer。可能许多人还记得Serializer提供了很多字段,类似models中的字段,当时我还在想,我说这玩意儿是用来干嘛的呢。现在回首,我想很多人像我一样,也已豁然开朗。记着,永远不要忘记Serializer的功能:序列化与反序列化。举个例子:

    from rest_framework import serializers
    
    class MyModelSerializer(serializers.ModelSerializer):
    	"""
    	一个序列化器
    	"""
        class Meta:
            model = MyModel
            fields = '__all__'
    
    	# Serializers中的create()方法
        def create(self, validated_data):
            ## your code
            return super().create(validated_data)
        
        # 定义的一个字段
        my_bool = BooleanField()
    

    上面我定义了一个字段:my_bool 。这个字段可接受的值是一个布尔值(0/1)。如果传其他值,则会报错。那么,很明显的,Serializer中重写create()方法的作用已然显现:对Serializer已校验的前端入参进行二次处理。默认情况下,serializer处理结束后,将会返回一个示例instance给视图(这一点存疑)。

到此Serializer的作用应该是结束了。


2 Views 视图

Serializer将校验成功的数据给到views,views拿到数据之后,用来做持久化

2.1 views中的create()与perform_create()

在views中你可以重写create(),并通过request.GET/request.POS/request.data拿到从前端传过来并经过Serializer规则校验的数据。
拿到之后呢?你可以对这些数据再次进行处理,或者将它作为调用其它接口的入参(这就是传说中的对其它系统的接口进行二次封装)。
视图中的create(),与序列化器中的create()有一个巨大的区别是:视图中的create()可以调用perform_create()进行持久化。这很棒棒,因为后端开发说白了就是对数据库进行增删改查(撇开使用不同框架的差异),而增删改查的难易程度事实上取决于你要解决的问题,即实际具体业务的复杂程度。文章来源地址https://www.toymoban.com/news/detail-644609.html


3 总结

  • Serializer主要是和前端打交道,so,基于这一点,你重写Serializer的create(),本质是为了过滤。如果通过了校验,并且满足你的要求,那么它会到视图中做下一步处理(通过过滤);反之,将会给前端反馈一些提示信息过去(被过滤)。
  • Views则相反,Views主要和后端打交道,你重写Views的create(),本质是为了持久化。在持久化之前,你可以对入参做任何符合实际情况的处理(包括调用其它接口),但是因为是POST/create(),最终你还是要持久化(perform_create())。

到了这里,关于Django rest_framework Serializer中的create、Views中的create/perform_create的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • django rest_framework 部署doc文档

    1.背景    在实际开发过程中,前后端分离的项目,是需要将一份完整的接口文档交付给前端开发人员,这样有利于开发速度和开发质量,以及有可能减少协同时间。 2.内容   本项目是以Python+django+rest_framework作为技术框架,在这套框架中,是有自己支持的api文档,现将实现方

    2024年01月17日
    浏览(36)
  • django rest_framework 框架动态设置序列化返回的字段

    动态修改字段可以使Django rest框架API像graphQL端点一样,只从模型中检索所需的字段。 一旦序列化器被初始化,就可以使用.fields属性访问序列化器上设置的字段字典。访问和修改此属性允许您动态修改序列化器。 显式地修改fields参数可以帮助您做一些奇怪的事情,例如在运行

    2024年02月16日
    浏览(42)
  • python Django Rest_Framework框架 安装与配置(图文并茂版)

    Django REST framework 是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发 REST API接口 应用。在REST framework中,提供了 序列化器Serialzier 的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。R

    2024年02月02日
    浏览(31)
  • rest_framework(3)序列化和反序列化(一)

    本系列文章中的上一篇文章:rest_framework.views.APIView 源码解析 导入的包 序列化器定义 BookView 类 get 方法中是序列化的使用,post 方法中是反序列化的使用 serializers.save() 方法分析 \\\"\\\"\\\"             serializer.save() 的源码             先看序列化器 BookSerializer ,类中没有 save() 方

    2024年02月11日
    浏览(29)
  • 基于rest_framework的ModelViewSet类编写登录视图和认证视图

    背景:看了博主一抹浅笑的rest_framework认证模板,发现登录视图函数是基于APIView类封装。 优化:使用ModelViewSet类通过重写create方法编写登录函数。 环境:既然接触到rest_framework的使用,相信已经搭建好相关环境了。 编写模型类 生成迁移文件 迁移数据模型 查看ModelViewSet类源

    2024年01月17日
    浏览(24)
  • Django REST framework中的序列化Serializers

    序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数据类型,然后可以将它们轻松地呈现为 JSON,XML 或其他内容类型。序列化器还提供反序列化,在首次验证传入数据之后,可以将解析的数据转换回复杂类型。 简单来说,服务器通过api 返回数据(json格

    2024年02月09日
    浏览(27)
  • Rest_Framework由浅入深:从CBV到ModelViewSet源码一步步解析

    1、Django Rest_Framework介绍 Django REST framework 是一个建立在 Django 基础之上的 Web 应用开发框架,可以快速的开发 REST API 接口应用。在 REST framework 中,提供了序列化器 Serialzier 的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集

    2024年02月06日
    浏览(33)
  • Django进阶:DRF(Django REST framework)

    DRF 即 Django REST framework 的缩写,官网上说: Django REST framework 是一个强大而灵活的工具包,用于 构建Web API 。 简单来说:通过DRF创建API后,就可以通过HTTP请求来获取、创建、更新或删除数据(CRUD)。 那么为什么要构建API呢? 在Django中,我们通过 model-view-template 实现了 后端和前

    2024年02月11日
    浏览(27)
  • 深入探索 Django Rest Framework

    这篇文章会详细介绍Django REST Framework的核心组成部分,包括Serializers、ViewSets、Routers、权限和认证系统以及测试和调试工具。文章从基础开始,逐步深入,旨在帮助读者掌握使用Django REST Framework构建复杂API的技能。 Django REST框架,通常简称为DRF,是一个强大而灵活的Web API工具

    2024年02月15日
    浏览(28)
  • django rest framework 学习笔记2

    注意:该文章部分摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除! 显示关联表的数据,本示例会显示所有的关联的数据信息 读取到的结果器数据关联的为数字,此时需要进行一些操作可以读到正确数据 方法1: source=\\\'字段名.关联属性值\\\' 方法2 : 返回其属性值

    2024年02月20日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包