在 Django REST Framework 中隐藏 GET 中的密码字段,但不隐藏 POST 中的密码字段,其中序列化程序中的深度 = 1

2024-01-08

我有 2 个模型:User 和 UserSummary。 UserSummary 有一个 User 的外键。我刚刚注意到如果我设置depth= 1 within UserSummarySerializer,密码字段包含在输出中。它已被散列,但最好仍然排除该字段。

为了隐藏密码字段,我只是在序列化器中显式设置用户字段,如下所示:

class UserSerializer(serializers.ModelSerializer):
    """A serializer for our user profile objects."""

    class Meta:
        model = models.User
       extra_kwargs = {'password': {'write_only': True}}
        exclude = ('groups', 'last_login', 'is_superuser', 'user_permissions', 'created_at')

    def create(self, validated_data):
        """Create and return a new user."""

        user = models.User(
            email = validated_data['email'],
            firstname = validated_data['firstname'],
            lastname = validated_data['lastname'],
            mobile = validated_data['mobile']
        )

        user.set_password(validated_data['password'])
        user.save()

        return user


class UserSummarySerializer(serializers.ModelSerializer):
    user = UserSerializer()

    class Meta:
        model = models.UserSummary
        fields = '__all__'
        depth = 1

这种方式的缺点是,创建新用户时,字段密码在 POST 请求中不再可用。

我怎样才能隐藏passwordUserSummary 的 GET 请求中的字段,但在 User 的 POST 请求中显示它?


这里的技巧是在“fields”元组中包含“password”字段,以便密码同时显示在“GET”和“POST”中,然后添加“extra_kwargs”以强制“password”字段仅出现在“POST”中形式。代码如下:

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email',
              'is_active', 'is_staff', 'is_superuser', 'password',)

        # These fields are displayed but not editable and have to be a part of 'fields' tuple
        read_only_fields = ('is_active', 'is_staff', 'is_superuser',)

        # These fields are only editable (not displayed) and have to be a part of 'fields' tuple
        extra_kwargs = {'password': {'write_only': True, 'min_length': 4}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django REST Framework 中隐藏 GET 中的密码字段,但不隐藏 POST 中的密码字段,其中序列化程序中的深度 = 1 的相关文章

  • Python 中的“断言”有什么用?

    什么是assert意思是 它是如何使用的 The assert语句几乎存在于所有编程语言中 它有两个主要用途 它有助于在程序早期发现问题 原因明确 而不是等到其他操作失败时才发现问题 例如 Python 中的类型错误在实际引发错误之前可能会
  • 如何使用 JAXRS 和 JAXB 设置 Restlet 服务器?

    我一直在互联网上查找 试图找到如何执行此操作的示例 我只是想设置一个 REST 服务器 它自动将对象序列化到 XML 或从 XML 序列化对象 我只是想提供一个服务器 以便于用户登录 注销以及仅在用户登录后访问 XML 对象列表 启动并运行
  • 动态添加字段到数据类对象

    我正在编写一个库来访问 REST API 它返回带有用户对象的 json 我将其转换为 dict 然后将其转换为数据类对象 问题是并非所有字段都是固定的 我想动态添加其他字段 未在我的数据类中指定 我可以简单地为我的对象分配值 但它们不会出
  • 仅选择多索引 DataFrame 的一个索引

    我正在尝试仅使用多索引 DataFrame 中的一个索引创建一个新的 DataFrame A B C first second bar one 0 895717 0 410835 1 413681 two 0 805244 0 813850
  • 如何使Python格式的浮点数具有一定数量的有效数字?

    我希望我的 Python 2 4 3 输出数字具有特定的格式 具体来说 如果数字是有效数字 6 位有效数字 则仅输出 6 位有效数字 A 显示了 Python 如何编写浮点数 B 显示了我希望它们如何书写 我怎样才能让Python以这种方式
  • df.drop(如果存在)

    下面是一个函数 它接受一个文件并删除列名row num start date end date 问题是并非每个文件都有这些列名 因此该函数返回错误 我的目标是更改代码 以便删除这些列 如果存在 但如果某个列不存在则不会返回错误 def re
  • 从 colab 中的驱动器中的 python 脚本导入 python 模块

    我目前正在 Google Colab 上开展一个使用 Tensorflow API 的机器学习项目 我创建了一个文件夹并将其上传到谷歌驱动器上以在谷歌Colab上运行 我成功安装了谷歌驱动器并可以运行脚本 但是当我尝试从同一文件夹中的脚本导
  • 在Python中使用readlines?第一次

    我有一个包含数据列的文本文件 我需要将这些列转换为单独的列表或数组 这就是我到目前为止所拥有的 f open data txt r temp for row in f readlines Data row split temp append
  • 在 Mac 上运行 Tkinter

    我是一个绝对的新手 我正在尝试为我的学校项目制作 Python GUI 所以我决定使用 Tkinter 当我尝试导入 Tkinter 时 它会抛出以下消息 gt gt gt import tkinter Traceback most rec
  • 在不同的函数中调用变量而不使用全局变量

    我试图在另一个函数中定义的函数中使用变量 列表 而不将其设置为全局 这是我的代码 def hi hello 1 2 3 print hello def bye hello print hello hi bye hello 目前我收到错误 b
  • 与 CPython、Jython 和 IronPython 相比,PyPy 能提供什么?

    从我在博客上看到和读到的内容来看 PyPy 是一个非常雄心勃勃的项目 与它的兄弟姐妹 CPython Jython 和 IronPython 相比 它会带来哪些优势 是速度 跨平台兼容性 包括移动平台 在没有 GIL 的情况下使用 c 扩展
  • 如何为 PyDev 制作文件模板?

    我希望在我创建的每个新文件的顶部都有一些有关许可证 作者等的样板信息 但我找不到要勾选的正确框 基本上 我想创建一个新文件 并已将其填充 在顶部 author Me license something copyright something
  • Python 类中的继承顺序

    我有课ExampleSim它继承自基类Physics class Physics object arg1 arg1 def physics method print physics method class ExampleSim Physi
  • 避免 Python 3 的多处理队列中的竞争条件

    我正在尝试找到大约 61 亿 自定义 物品的最大重量 并且我想通过并行处理来完成此操作 对于我的特定应用程序 有更好的算法不需要我迭代超过 61 亿个项目 但解释它们的教科书超出了我的能力范围 我的老板希望在 4 天内完成此任务 我认为我公
  • 使用 tf.keras.Models.Sequential 构建的架构是否比使用 Tensorflow 的功能 API 构建的架构运行得更慢、更准确?

    我只是比较了 2 个 我认为 等效的 VGG ish 架构 一个是使用构建的tf keras Models Sequential 另一个用了Tensorflow 的函数式 API 每个人都试图解决cats vs dogs 数据集 经过 10
  • 从 pandas 数据帧中提取阶段/段以及相应的时间戳

    我有以下数据框 Sleep Stage Time hh mm ss Event Duration s 0 SLEEP S0 23 27 14 SLEEP S0 30 1 SLEEP S0 23 27 44 SLEEP S0 30 2 SLE
  • bdist_rpm 从 Ubuntu 到 CentOs

    我们在 Ubuntu Mac 上进行开发 并将 RPM 部署到 CentOS 这是设置 不能更改太多 问题是 当从 rpm 安装时 软件包会转到 usr local lib python2 7 dist packages 这是 Ubuntu
  • 如何触发应用程序通过 REST 服务获取数据?

    我正在寻找一种方法来触发应用程序从远程 REST 服务获取数据 该方法不需要轮询 iOS 推送通知似乎不是一个选项 因为它可以被用户停用 然而 我可能是错的 是否有最佳实践来完成此任务 实际上 推送通知是可行的方法 在 ios8 及更高版本
  • Pandas .apply() 函数中的异常处理

    如果我有一个数据框 myDF DataFrame data 11 11 22 2A 33 33 columns A B 给出以下数据帧 从 stackoverflow 开始 对于数据帧的图像没有足够的声誉 A B 0 11 11 1 22
  • 如何使用BeautifulSoup查找所有下一个链接

    我目前正在通过预设一个名为 number of pages 的变量来抓取特定网站的所有页面 预设此变量一直有效 直到添加了我不知道的新页面 例如 下面的代码适用于 3 个页面 但网站现在有 4 个页面 base url https secu

随机推荐