Django中`request.data [' param-name']`或`request.data.get(' param-name')`之间的区别

时间:2018-05-30 10:44:21

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

我尝试从API获取数据

1 request.data['param-name']

输出 - :' 9121009000'

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

输出 - :' 9121009000'

两者都给出了相同的结果。

那么哪一个最好使用获取数据和为什么。

提前致谢

2 个答案:

答案 0 :(得分:6)

如果您在幕后执行request.data['key']来电,Python会调用__getitem__的{​​{1}}功能。我们可以阅读the documentation并查看:

  

<强> request.data

     

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

然而,如果您执行KeyError。get(..)`函数,我们会在documentantation中看到:

  

<强> request.data.get('key'), it will call the

     

使用与QueryDict.get(key, default=None)相同的逻辑,使用钩子返回a   如果密钥不存在,则默认值。

所以这意味着如果密钥不存在,__getitem__()将返回.get(..),以防您提供默认值,否则它将返回给定的默认值如果您使用None进行查询。

通常后者用于值是可选的,并且您希望减少检查密钥是否存在的代码量。

答案 1 :(得分:2)

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

x = tostring(ABC)
x[1]
x[2]
x[3]

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