pop()' 在 Django Rest FrameWork 中做了啥?

Posted

技术标签:

【中文标题】pop()\' 在 Django Rest FrameWork 中做了啥?【英文标题】:What does pop()' do in Django Rest FrameWork?pop()' 在 Django Rest FrameWork 中做了什么? 【发布时间】:2019-10-04 05:08:15 【问题描述】:

我想了解为什么要使用这个函数

类 UserSerializer(serializers.ModelSerializer): profile = ProfileSerializer()

class Meta:
    model = User
    fields = ('username', 'email', 'profile')

def create(self, validated_data):
    profile_data = validated_data.pop('profile')
    user = User.objects.create(**validated_data)
    Profile.objects.create(user=user, **profile_data)
    return user

【问题讨论】:

获取'profile'关联的元素,同时删除。 见here。 【参考方案1】:

validated_data 是一个字典,.pop(key) 搜索指定的键,如果找到则返回并删除它,否则抛出异常。

【讨论】:

【参考方案2】:

key指定的值会被转换成OrderedDict的列表并弹出。因此结果将具有指定键的有序值。

【讨论】:

【参考方案3】:

get()pop() 都返回项目,但 pop() 将它们从源字典中删除,而 get() 将它们留在原处。

这解释了为什么它们会在您的测试中返回相同的项目。但是,如果您再次尝试相同的 pop(),您会发现 项目已从您正在访问的字典中删除

【讨论】:

【参考方案4】:

pop() 基本上是一个 python 方法。在字典数据中,它以一个键为参数,从字典中删除匹配的元素,并返回它的值。

示例 sn-p

elements = 'Book': 5, 'Pen' : 2, 'Pencil': 2
removed = elements.pop('Pen')
print('Removed: ',removed)
print('Elements now: ',elements)

输出:

Removed:  2
Elements now:  'Book': 5, 'Pencil': 2

作为你的场景,

profile_data = validated_data.pop('profile')

validate_data 中,键为profile 的元素将被删除,其值将存储在profile_data 变量中。

【讨论】:

以上是关于pop()' 在 Django Rest FrameWork 中做了啥?的主要内容,如果未能解决你的问题,请参考以下文章

“未提供身份验证凭据。” Django 和 AWS 应用程序

drf-jwt认证

在 django-rest-framework 中插入 django-allauth 作为端点

Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?

如何防止 Django Rest 中的暴力攻击 + 使用 Django Rest Throttling

将 REST 添加到 Django [关闭]