【问题标题】:What is different between `request.data['param-name'] ` or `request.data.get('param-name')` in DjangoDjango中的`request.data['param-name']`或`request.data.get('param-name')`有什么不同
【发布时间】:2018-11-09 04:33:45
【问题描述】:

我尝试从 API 获取数据

1 request.data['param-name']

输出 -:'9121009000'

2request.data.get('param-name')

输出 -:'9121009000'

两者都给出相同的结果。

那么哪一个是最好用的获取数据以及为什么。

提前致谢

【问题讨论】:

标签: python django python-3.x django-rest-framework django-views


【解决方案1】:

是的,它们都会为您提供相同的结果,但它们的不同之处在于它们检索给定键的数据的方式。为此,您需要了解 python 中的字典是如何工作的,让我们定义一个字典:

>>> kwarg = {'name': 'John'}
>>> kwarg['name']
'John'
>>> kwarg['age']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'
>>>
>>> kwarg.get('age', 25)
25

在上面的示例中,第一种方法中的键必须存在,而在第二种情况下,如果找不到键,我可以定义一个默认值。

【讨论】:

    【解决方案2】:

    如果您执行request.data['key'] 调用,Python 将在幕后调用request.data__getitem__ 函数。我们可以阅读the documentation 并查看:

    QueryDict.__getitem__(key)

    返回给定key 的值。如果key 有多个 值,它返回最后一个值。 加薪 django.utils.datastructures.MultiValueDictKeyError 如果密钥是 不存在。 (这是 Python 标准 KeyError 的子类,所以 你可以坚持抓KeyError。)

    而如果您执行request.data.get('key'), it will call the.get(..)` 函数,我们在documentantation 中看到:

    QueryDict.get(key, default=None)

    使用与__getitem__() 相同的逻辑,带有一个钩子用于返回一个 如果键不存在,则为默认值

    所以这意味着如果密钥不存在,.get(..) 将返回 None,以防您没有提供默认值,或者如果您使用查询,它将返回给定的默认值request.data.get('key', somedefault).

    通常在值是可选的情况下使用后者,并且您希望减少检查键是否存在的代码量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多