Python Django中的'request.data[';param name';]`或'request.data.get(';param name';)`之间有什么不同
我试图从API获取数据 1Python Django中的'request.data[';param name';]`或'request.data.get(';param name';)`之间有什么不同,python,django,python-3.x,django-rest-framework,django-views,Python,Django,Python 3.x,Django Rest Framework,Django Views,我试图从API获取数据 1request.data['param-name'] 输出-:'9121009000' 2request.data.get('param-name') 输出-:'9121009000' 两者都给出了相同的结果 那么,哪一个是获取数据的最佳方法以及原因 如果您执行请求.data['key']调用,请提前感谢,在窗帘后面,Python将调用请求.data的函数。我们可以看到: QueryDict.\uuu获取项目\uuuuuuu(键) 返回给定键的值。如果键有多个 值,则返
request.data['param-name']
输出-:'9121009000'
2request.data.get('param-name')
输出-:'9121009000'
两者都给出了相同的结果
那么,哪一个是获取数据的最佳方法以及原因
如果您执行
请求.data['key']
调用,请提前感谢,在窗帘后面,Python将调用请求.data的函数。我们可以看到:
QueryDict.\uuu获取项目\uuuuuuu(键)
返回给定键的值。如果键有多个
值,则返回最后一个值提高
django.utils.datastructures.multi-valuedictKeyError
如果该键
不存在。(这是Python标准KeyError
的一个子类,所以
您可以坚持捕捉KeyError
)
然而,如果执行request.data.get('key'),它将调用.get(..)`函数,我们在中看到:
QueryDict.get(key,default=None)
使用与\uuu getitem\uuu()
相同的逻辑,使用钩子返回
如果密钥不存在,则为默认值
因此,这意味着如果密钥不存在,.get(..)
将返回None
,如果您没有提供默认值,或者如果您使用request.data.get('key',somedefault)
进行查询,它将返回给定的默认值
通常,如果值是可选的,并且您希望减少检查键是否存在的代码量,则使用后者。是的,这两种方法都会给出相同的结果,但不同之处在于它们检索给定键数据的方式。为此,您需要了解python中字典的工作原理,让我们定义一个dict:
>>> 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
kwarg={'name':'John'}
>>>kwarg['name']
“约翰”
>>>夸格[年龄]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
关键错误:“年龄”
>>>
>>>kwarg.get('年龄',25岁)
25
在上面的示例中,在第一种方法中,键必须存在,而在第二种情况下,如果找不到键,我可以定义一个默认值。可能的重复项