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

DRF序列化程序不返回extra_kwargs为write_only的值

DRF(Django REST framework)是一个用于构建Web API的强大框架,它提供了许多功能和工具,包括序列化程序(Serializer)。在DRF中,序列化程序用于将复杂的数据结构转换为可序列化的格式,以便在网络上进行传输或存储。

在DRF序列化程序中,可以使用extra_kwargs参数来为字段提供额外的配置选项。其中,write_only是extra_kwargs的一个选项,用于指定某个字段只能用于写入操作,而不能用于读取操作。这在一些敏感信息(如密码)的处理中非常有用,可以确保这些字段不会被意外地返回给客户端。

然而,DRF序列化程序在默认情况下不会返回extra_kwargs为write_only的字段的值。这是因为DRF的设计理念是尽量减少敏感信息的泄露风险,只返回客户端需要的数据。因此,如果需要在序列化程序的输出中包含write_only字段的值,需要进行一些额外的配置。

一种常见的解决方法是创建一个自定义的序列化程序,并在其中明确指定需要返回的字段。可以通过继承DRF的序列化程序类,并重写to_representation方法来实现这一点。在to_representation方法中,可以通过调用父类的实现来获取默认的序列化结果,然后根据需要添加或删除字段。

以下是一个示例代码:

代码语言:txt
复制
from rest_framework import serializers

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'
        extra_kwargs = {
            'password': {'write_only': True},
        }

    def to_representation(self, instance):
        data = super().to_representation(instance)
        if 'password' in data:
            data['password'] = instance.password
        return data

在上面的示例中,我们创建了一个名为MySerializer的自定义序列化程序,并在Meta类中指定了extra_kwargs参数来设置password字段为write_only。然后,在to_representation方法中,我们首先调用父类的to_representation方法获取默认的序列化结果,然后将password字段的值手动添加到返回的数据中。

这样,当使用MySerializer进行序列化时,write_only字段的值将包含在输出中。

对于DRF的推荐产品和产品介绍链接地址,由于要求不能提及特定的云计算品牌商,我无法给出具体的推荐。但是,可以根据实际需求选择适合的云计算服务提供商,并在其官方文档中查找相关产品和功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

rest_framework序列化与反序列化1

但在序列化中没有对应字段,该类字段参与序列化 3)自定义序列化字段(方法一),字段类型SerializerMethodField(),由 get_自定义字段名(self, model_obj) 方法提供...= serializers.CharField() # 建议自定义字段名与数据库字段名重名,最好使用get_自定义字段名方法返回提供字段 # sex = serializers.SerializerMethodField...如果我们想要使用序列化器对应是Django模型类,DRF我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。...只写(write_only)、可读可写(设置时) 字段是否必须填写:required 选填字段:在extra_kwargs进行配置,不用设置required,默认required=False 只读只写等操作用于参加序列化与反序列化字段...}, 'sex': { # 像sex有默认字段,选填字段('required': True可以将其变为必填字段) 'write_only'

90010

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

序列化drf核心概念。 drf提供了一个serializer类,它可以非常方便序列化模型对象和查询集json或者其他形式内容。...只有注册时候需要使用,返回时候不需要 password_confirm = serializers.CharField(label='确认密码', help_text='确认密码', write_only...,所以需要编写一个比较全序列化器来处理 密码在响应时候展示,所以在extra_kwargs中特别标注 更改密码时候由于密码是加密,所以需要使用自带set_password方法来进行处理 创建账号由于这个是用于管理员创建账号...= { 'password': { 'write_only': True # 展示时候渲染密码 }...DRF框架最关键一部分,用好序列化器可以大大减少不必要方法重写 建议所有的请求和响应都要经过序列化器,也就是 想要返回一个json,先写一个对应数据结构序列化器 想要处理一个json,先写一个对应数据结构序列化

34230

django-rest-framewor

2 解析器组件 (用来解析数据请求组件)   Django并不能处理请求协议application/json编码协议数据   注意: DRF解析器会封装到View中parsers内,在视图函数被调用时...定义需要返回字段(字段类型可以与model中类型不一致,参数也可以调整),字段名称必须与model中一致 在GET接口逻辑中,获取QuerySet 开始序列化:将QuerySet作业第一个参数传给序列化类...,many默认为False,如果返回数据是一个列表嵌套字典多个对象集合,需要改为many=True 返回:将序列化对象data属性返回即可  {{ 实践代码 }} --post接口设计 url...P\d+),所以此时调用方式view(request, pk=id) 视图函数中有一行self.kwargs = kwargs,所以pk已经被视图函数找到了 视图函数返回self.dispatch(...,请在最后一个认证类中返回,因为在前面返回,self.authentication()方法中会对返回进行判断,若不为空,认证过程就会终止.

1.5K10

Django REST Framework-什么是序列化器(二)

我们指定了要包含在序列化器中字段以及每个字段属性。我们还指定了密码字段write_only属性,这意味着在反序列化期间它将不会被返回。...总结序列化器是DRF一个核心概念,它允许我们将Django模型转换为序列化格式,并反之亦然。...使用序列化器,我们可以将Django模型序列化为JSON、XML或YAML格式,以便我们可以将其发送到前端应用程序序列化器还可以帮助我们验证输入数据,并确保数据有效性。...在DRF中,我们使用Serializer或ModelSerializer类来定义序列化器,具体取决于我们是否要序列化Django模型。序列化器还可以用于验证输入数据,并将其转换为Django模型。...在DRF官方文档中,可以找到更多有关序列化详细信息和示例。

65030

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

目录 DRF核心--序列化序列化器 什么是序列化和反序列化?...DRF核心当然不是知道视图类执行流程就可以了,DRF框架核心那就是 序列化使用,如何使用序列化器实现 序列化、 反序列化,以及视图,这篇会介绍到~ 序列化器 什么是序列化和反序列化?...demo 在app中新建serializer.py,自定义类,继承DRF框架Serializer及其子类 在类中写要序列化字段(序列化哪些就写哪些,序列化写) 使用序列化类,视图类中用,得到序列化类对象...write_only 表明该字段仅用于反序列化输入,默认False required 表明该字段在反序列化时必须输入,默认True default 反序列化时使用默认 allow_null...authors = serializers.CharField(write_only=True) # 该字段是从modelsprice_info返回获取到,price_info

77810

django drf_mnbkdrf

如果我们需要使用模型全部字段,则可以将fields属性设置成'__all__' 默认情况下,fields里字段既参加序列化也参加反序列化,如果我们想某个字段只序列化或反序列化可以定义extra_kwargs..."read_only": False } } 上面代码如果extra_kwargs,那么password默认参加序列化和反序列化,那么密码就会返回给前端了,这里我们定义了...extra_kwargs字段,在字段中设置了password只能反序列化,那么用户只能提交密码,而后台不会返回密码给前台 当然,extra_kwargs也可以自定义错误信息,如果业务有需要,可以查看官方文档...classes,并将字段设置只读,一般外键只做序列化,并且在fields列表中添加了该字段。...注意:我们在创建外键模型时,必须在外键中设置related_name,如果没设置,序列化时不会返回关联外键内容 接下来我们访问http://127.0.0.1:8000/drf/student/,会看到返回学生表中包含了班级表内容

39820

Python进阶40-drf框架(二)

2)drf默认提供了异常处理方案(rest_framework.views.exception_handler),但是处理范围有限 3)drf提供处理方案两种,处理了返回异常现象,没处理返回None...去处理 # 2)判断处理结果(返回)response,有代表drf已经处理了,None代表需要自己处理 # 自定义异常处理文件exception,在文件中书写exception_handler函数...() # 自定义序列化属性 # 属性名随意,由固定命名规范方法提供: # get_属性名(self, 参与序列化model对象) # 返回就是自定义序列化属性...sex选填字段 # 五个字段都必须提供完成校验规则 # 局部钩子:validate_要校验字段名(self, 当前要校验字段) # 校验规则:校验通过返回原值,校验失败...序列化 ser: 1)设置需要返回给前台 那些model类有对应 字段,不需要返回就不用设置了 2)设置方法字段,字段名可以随意,字段有 get

1.9K20

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

): class Meta: model=对应模型 fields=('参与序列化和反序列字段1','参与序列化和反序列字段2') #fields...fields=('参与序列化和反序列字段1','参与序列化和反序列字段2') extra_kwargs ={ 参与序列化和反序列字段1:{...fields=('参与序列化和反序列字段1','参与序列化和反序列字段2') extra_kwargs ={ 参与序列化和反序列字段1:{...'write_only': True #只写 } 参与序列化和反序列字段2:{ '...框架自带Response 注意点:save源码中我们可以看到instance有调用updata方法,没有调用create方法.所以修改必须加instance参数,传参数基本上是修改之前对象 有关删除

1.4K20

Django序列化简单使用

write_only 表明该字段仅用于反序列化输入,默认False required 表明该字段在反序列化时必须输入,默认True default 反序列化时使用默认 allow_null 表明该字段是否允许传入...drf提供视图会帮我们把字典转换成json,或者把客户端发送过来数据转换字典。 3、序列化使用 序列化使用分为两个阶段:即在客户端请求(提交)数据时,使用序列化器可以完成对数据序列化。...在获取反序列化数据前,必须调用is_valid() 方法进行验证,验证成功返回True,否则返回False。...如果我们想要使用序列化器对应是Django模型类,DRF我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。...'price': {'write_only': True}, } 我们可以使用extra_kwargs参数ModelSerializer添加或修改原有的选项参数 class BookInfoSerializer

1.5K40

Python进阶43-drf框架(五)

大总结 接口 DRF入门 序列化组件 三大认证 群查过滤组件 -曾老湿, 江湖人称曾老大。...# 完成数据校验,会走序列化 全局钩子校验规则,校验得到登录用户并签发token存储在序列化对象中 核心源码:rest_framework_jwt.serializer.JSONWebTokenSerializer...:系统只处理了部分,所以手动还需要处理;后期异常信息需要记录到日志文件 工作流程:先交给drf处理异常,如果有响应结果,代表drf已处理,如果是None,自己处理 """ 序列化组件 # 1)可以将...model对象序列化成可以返回给前台json数据 # 2)可以校验前台传来数据,完成model增与改 模型层 class User(models.Model): name = models.CharField...使用: i)视图类添加过滤类:filter_backends = [SearchFilter, OrderingFilter, LimitFilter, DjangoFilterBackend] ii)不同过滤类配置过滤条件

3.1K20

django和drf_类中方法可以序列化

write_only:当True时表示这个字段只能写,只有在新增数据或者更新数据时候会用到。...比如我们账号密码,只允许用户提交,后端是返回密码给前台 required:当True时表示这个字段必填,填状态码会返回400 default:默认,没什么好说 allow_null:当True...时,允许该字段空   之后我们又定义了局部钩子,校验特殊字段,比如需求规定,用户性别只能输入男和女,此时你就可以定义一个钩子,当然drf自动帮我们做了一些校验,比如需要字段是int类型,你输入..."男必须22周岁以上才能结婚" ] } 总结 设置必填与选填序列化字段,设置校验规则 需要额外校验字段提供局部钩子函数,如果该字段不入库,且不参与全局钩子校验,可以将取出校验 有联合关系字段们提供全局钩子函数...,如果某些字段不入库,可以将取出校验 重写create方法,完成校验通过数据入库工作,得到新增对象 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164896

1.1K30

day91-day92-DjangoRestFrameWork序列化&反序列化使用

2.2.5 主外键关系:主表字段名 = 外键类(),多对多关系时注意指定many=True参数 2.2.6 -- required=False 只序列化走校验 -- read_only...=True 只序列化用 -- write_only=True 只反序列化用 2.2.7 可以自定义字段名,自定义字段一般只用于反序列化 2.2.8 创建数据要重写 create...,一般自定义参数展示指定 read_only=True 3.3 get_XXX 自定义字段名称,该函数返回返回给该自定义字段 3.4 obj 就是序列化每一个表类对象 3.5 注意 class...Book对象 # get_XXX 自定义字段名称,该函数返回返回给该自定义字段 @staticmethod def get_category_info(obj):...=['id'] # 将该字段设置只写,将不会给前端传递该字段参数 extra_kwargs = { 'title': {

97650

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

一次性验证码,英文是 One Time Password,简写 OTP,又称动态密码或单次有效密码,是指计算机系统或其他数字设备上只能使用一次密码,有效期只有一次登录会话或很短如 1 分钟。...今天讲一下如何用 Django REST framework[1](DRF) 来实现 OTP,阅读本文需要一定 DRF 基础知识。...要实现功能就是: 1、验证码是 6 位数字和小写字母组合。 2、有效期 5 分钟,第二次发送验证码必须在 1 分钟之后。 3、如果该邮箱/手机号已经注册,则不能发送注册验证码。...最后的话 一次性验证码(OTP)逻辑简单,需要思考是如何在 DRF 框架中填空,填在哪里?...这其实需要了解 DRF ModelSerializer 类和 ViewSet 类之前关系,在调用关系上,ViewSet 类调用 ModelSerializer 来实现字段验证和数据保存及序列化

1.7K20

DjangoRestFramework,序列化组件、视图组件

Response如果返回drf序列化之后数据,那么客户端拿到是一个有格式数据,不再是一行显示了   看效果: ?...,生成实例则作为save()返回返回。...1.read_only read_only=True表示该字段只读字段,即对应字段只用于序列化时(输出),而在反序列化时(创建对象)不使用该字段。默认False。...2.write_only write_only=True表示该字段只写字段,和read_only相反,即对应字段只用于更新或创建新Model时,而在序列化时不使用,即不会输出给用户。...默认False。 3.required required=False表示对应字段在反序列化时是非必需。在正常情况下,如果反序列化时缺少字段,则会抛出异常。默认True。

2.6K20

测试开发进阶(二十六)

序列化序列化器中定义类属性字段,往往与模型类字段一一对应 label选项相当于 verbose_name; 定义序列化器字段,默认既可以进行序列化输出,也可以进行反序列化输入 通用参数 read_only...=True 指定该字段只能进行序列化输出 write_only=True 指定该字段只进行反序列化输入,但不进行序列化输出 required该字段在反序列化时必须传入,默认为True default反序列化时使用默认...最小 min_value最大 校验 调用序列化器对象 is_valid方法,才开始校验前端参数 如果校验成功,则返回 True,校验失败返回 False raise_exception=True,...这里 name None是因为上面单字段校验没有返回value 修改后再次测试 def validate_name(self, value): if not value.endswith('项目...__' extra_kwargs = { 'leader': { 'write_only': True, 'error_messages'

43660

DRF框架学习(二)

把其他格式数据转换为程序中数据结构类型,这个过程叫做反序列化过程。 例:将前端传递数据保存到模型对象中过程,叫做反序列化过程。...3.2见识DRF魅力 我们仍以在学习Django框架时使用图书英雄案例,使用Django REST framework快速实现图书REST API。 3.2.1....default 我们在使用序列化和反序列化时使用默认 allow_null 表明该字段是否允许传入None,默认False help_text、label_text 可以理解注释,在web直观显示时候有一个显示信息...) hbook = BookInfoSerializer(label='图书') 3)将关联对象序列化为关联对象模型类_str_方法返回 hbook = serializers.StringRelatedField...4.7模型类序列化ModelSerializer 如果我们想要使用序列化器对应是Django模型类,DRF我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer

4.1K30
领券