首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

经历了源码的痛苦,掌握DRF的核心序列化器

序列化 序列化demo 字段类型 字段参数 序列化自定制返回字段 方法一:在序列化类(serializers.py)中写 方法二:在表模型(models.py)中写 反序列化 反序列化demo 反序列化之局部和全局钩子...ModelSerializer模型类序列化器 字段参数 DRF的核心--序列化器 上一篇介绍了很多有关视图类以及DRF中的APIView执行流程、Request对象的源码分析,源码都get了;...,自定义类,继承DRF框架的Serializer及其子类 在类中写要序列化的字段(序列化哪些就写哪些,不序列化的不写) 使用序列化类,视图类中用,得到序列化类对象,对象.data,通过Response返回给前端...= serializers.CharField(write_only=True) authors = serializers.CharField(write_only=True) #...': True, 'max_length': 8, 'min_length': 3} } # 指定序列化的字段:两种写法:在序列化类中写;models中写 price_info

83910

5.寻光集后台管理系统-用户管理(序列化器)

序列化器 drf的核心概念。 drf提供了一个serializer类,它可以非常方便的序列化模型对象和查询集为json或者其他形式的内容。...', 'max_length': '仅允许6-20个字符的密码', }) write_only=True:表示只有在进行写入操作的时候才会用到这个字段 就是说只有前端往后端发送请求的时候...(), message='此邮箱已注册')] }, } drf中自带了一个判重的校验,如果有定制的校验的话就需要编写一个函数 from rest_framework.validators...,管理员需要能对其他账号进行增删改查操作,所以需要编写一个比较全的序列化器来处理 密码在响应的时候不展示,所以在extra_kwargs中特别标注 更改密码的时候由于密码是加密的,所以需要使用自带的set_password...在序列化器的校验(validate方法)中,可以对数据进行一定程度上的改造

36230
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从入门到_精通_Django REST Framework-(二)

    Serializer 在 DRF 中负责:序列化:将模型实例/Python 对象 → 转换为 JSON等格式反序列化:将客户端传入的数据 → 转换为 Python 对象 → 再保存到数据库数据验证:检查输入数据是否符合业务规则...使用场景read_only=True: 字段仅用于输出(如创建时间、ID,用户无法提交修改)write_only=True: 字段仅用于输入(如密码确认字段,用户无法读取)示例class UserSerializer...= CharField(write_only=True) # 用户只能写入,程序不会响应给用户password数据allow_blank 和 trim_whitespace注意:这两个参数仅适用于字符串字段...=True # 只允许输入作者ID,输出时不显示 ) # 自定义验证 def validate_title(self, value): if 'test' in...最佳实践保持简洁:避免在 Serializer 中添加业务逻辑明确职责:验证逻辑放在 Serializer,业务逻辑放在 Model 或 Service 层性能优化:使用 select_related/

    9500

    DRF框架学习(二)

    通常简称为DRF框架 或 REST framework。 DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。...,意思是这个字段在反序列化时必须输入 read_only、write_only 默认是False,如果是仅用于反序列化输出时使用,那么将write_only改为True,如果是仅用于序列化输出,将read_only...default 我们在使用序列化和反序列化时使用的默认值 allow_null 表明该字段是否允许传入None,默认False help_text、label_text 可以理解为注释,在web直观显示的时候有一个显示信息...= serializers.PrimaryKeyRelatedField(label='图书',read_only=True) # 在书中(一)中添加,因为书中有好多个英雄人物,想要都显示,所以要添加...heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) 2)使用指定的序列化器将关联对象进行序列化(字典套字典的显示方式

    4.1K30

    Django REST Framework

    : 仅用于序列化输出 write_only: 反序列化输入 required:反序列化时必须输入,默认是True allow_null: 允许传入None validators: 使用验证器创建serializer...视图的扩展 Request 把请求解析成一个request实例 属于DRF的,跟django的HttpRequest不太一样 在得到Request之前有一个Parse对传入的数据请求进行解析 data...属性 请求数据体,类似于Django的request.POST, request.FILES 在DRF中主要指的是Json query_params 所有传入的关键字 api.tulingxueyuan.com...Renderer渲染器对返回内容进行渲染 REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类...的子类跟View有不同的地方传入传出数据用的是drf的请求和反馈类会引发并处理APIException在dispatch之前,会进行身份验证,权限检查,流量控制支持的属性有authentication_classes

    2.2K63

    django rest framework之注册

    最近没怎么更新文章 确实有点小忙 一直都在研究django rest framework,简称drf drf的开发理念顺应了现代的开发理念 前后端分离式 而我这个技术小白,很想很想 体验一把前后端分离式开发到底是怎么个流程...(required=True,write_only=True,max_length=4,min_length=4,label="验证码",...=True 大家 可以从代码中找到 我直接讲作用吧,加了这句代码,那么这句代码所在的那个模型的属性就不会再被drf 序列化,从而也不会再去生成对应的对象 也许你有点晕,我这么解释,你看1中,我们的用户模型...,也就是UserProfile中,我们是没有account这个属性的,但是我们在注册的时候,发送验证码,是一定需要这个account这个属性的 ,因为系统只有知道了你的账号,无论是电话还是邮箱 才能给你发验证码...但是在序列化生成UserProfile的时候,我们不需要这个account这个属性 对嘛 所以,我们需要加上 write_only=True 这样一来,前端也有account,后端也能发验证码 还能避免

    58240

    DRF框架中的英文单词

    DRF框架中的英文单词 1. prefix/'prifɪks/前缀,我们在路由配置的时候经常看见这个单词。在flask中,我们可以在设置url的时候为了区别视图,在类似功能的url全部加一个前缀。...2. version/'vɝʒn/版本,这个在计算机上面很常见,在DRF框架中的RESTful设计风格中有一种规范,就是将api的版本号放入url中,如下:(1.0即版本号) http://www.example.com...4. filter/'fɪltɚ/过滤,我们在DRF框架的高级功能中,就有过滤这一项。可以在url地址中传参数,我们进行过滤。 5....但是pattern在计算机中通常用来表示模式。 19. Serialization/ˌsɪərɪrlaɪ'zeɪʃn/序列化,这个单词全球只有美式音标,统一的。...,默认False write_only 表明该字段仅用于反序列化输入,默认False required 表明该字段在反序列化时必须输入,默认True default 序列化和反序列化时使用的默认值 allow_null

    1.7K30

    drf框架serializers中ModelSerializer类简化序列化和反序列化操作

    0905自我总结 drf框架serializers中ModelSerializer类 基于seriallizer类进行简化 https://www.cnblogs.com/pythonywy/p/11455508...'is_delete') # 刨除某些字段 # depth = 1 # 跨表自动深度(展示外键表的所有字段) 注意点 其中fields与exclude不能共存 depth不能控制显示字段...,与外键相关的表会全部显示出来 二.利用模型类中的方法进行指导字典的生成 例如有两个模型A与B,他们的c字段有外键关联 modles.py class B(models.Model): name...参与序列化和反序列的字段1','参与序列化和反序列的字段2') extra_kwargs ={ 参与序列化和反序列的字段1:{ 'write_only...': True #只写 } 参与序列化和反序列的字段2:{ 'read_only': True #只读

    1.5K20

    DRF序列化和反序列化——基本使用

    DRF序列化和反序列化 定义序列化器 DRF中有serializer的类,我们可以从rest_framework进行导入。...现在,我们在views中定义一个视图类,如下: class BookView(View): def get(self, request, *args, **kwargs): book_id...表明该字段仅用于反序列化输入,默认False required 表明该字段在反序列化时必须输入,默认True default 反序列化时使用的默认值 label 用于HTML展示API页面时,显示的字段名称...验证成功,返回True,否则返回False。 验证失败返回的错误信息存放在errors属性中,验证成功可以通过序列化器的validated_data属性获取数据。...反序列化 保存 验证成功后,我们可以通过validated_data属性获取数据,拿到数据以后,可以通过在序列化器中实现create()和update()两个方法来完成新增和修改操作。

    1.1K10

    Python进阶40-drf框架(二)

    ---- 解析模块 ---- 为啥要配置解析模块 """ 1)drf给我们通过了多种解析数据包方式的解析类 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析 3)全局配置就是针对每一个视图类...已经处理了,None代表需要自己处理 # 自定义异常处理文件exception,在文件中书写exception_handler函数 from rest_framework.views import exception_handler...:param status: http响应状态码 :param template_name: drf也可以渲染页面,渲染的页面模板地址(不用了解) :param...serializers.SerializerMethodField() def get_gender_value(self,obj): return obj.get_gender_display()  在序列化过程中...views 中的 exception_handler 先处理 if response is None: 通过context,exc记录详细的异常信息 自己自定义响应对象

    2K20

    Django+Vue开发生鲜电商平台之7.用户登录和注册功能

    2.DRF实现发送短信验证码接口 需要在DRF中接入短信验证码发送。...View时,create()方法中调用serializer.is_valid()时需要加入参数raise_exception=True,这样在执行时如果is_valid()方法出错就会抛出异常,不会再向下执行...因此在验证之后需要删除,在validate(attrs)方法中实现即可,同时因为人为设定前端传递回来的手机号数据变量名为username而非mobile,因此需要在validate(attrs)方法中为...从之前的DRF的测试中可以总结出,DRF请求消息返回的规范为: http_code { field1: ['', ''], field2: [], ......(attrs)又将其删去,导致在序列化时找不到code字段,因此出错,这是需要将字段的write_only设置True,以确保在更新或创建实例时可以使用该字段,但是在序列化表示形式时不包括该字段。

    4.5K20

    用 Django REST framework 来实现一次性验证码(OTP)

    今天讲一下如何用 Django REST framework[1](DRF) 来实现 OTP,阅读本文需要一定的 DRF 的基础知识。...2、发送前验证,是否上次发送的验证码在 1 分钟之内?是否邮箱已经注册?,如果是,拒绝发送,并提示用户,如果否,发送验证码。 3、验证,是否是 5 分钟之内的验证码,是否正确,如果是,则放行。...=True) # 利用drf中的validators验证username是否唯一 username = serializers.CharField(required=True, allow_blank...最后的话 一次性验证码(OTP)的逻辑简单,需要思考的是如何在 DRF 的框架中填空,填在哪里?...这其实需要了解 DRF 的 ModelSerializer 类和 ViewSet 类之前的关系,在调用关系上,ViewSet 类调用 ModelSerializer 来实现字段的验证和数据保存及序列化,

    1.8K20
    领券