request.POST.get( 'sth')とrequest.POST ['sth']-違いはありますか?


84

違いは何ですか

request.POST.get('sth')

そして

request.POST['sth']

同様の質問は見つかりませんでした。どちらも同じように機能します。別々に使用できると思いますが、間違っている可能性があるため、質問しています。何か案は?

回答:


195

request.POST['sth']にないKeyError場合'sth'は例外が発生しrequest.POSTます。

request.POST.get('sth')にないNone場合'sth'は戻りrequest.POSTます。

さらに、.getキーが辞書にない場合に返されるデフォルト値の追加パラメーターを提供できます。例えば、request.POST.get('sth', 'mydefaultvalue')

これはPython辞書の動作であり、に固有のものではありませんrequest.POST



これらの2つのスニペットは機能的に同じです。

最初のスニペット:

try:
    x = request.POST['sth']
except KeyError:
    x = None


2番目のスニペット:

x = request.POST.get('sth')



これらの2つのスニペットは機能的に同じです。

最初のスニペット:

try:
    x = request.POST['sth']
except KeyError:
    x = -1


2番目のスニペット:

x = request.POST.get('sth', -1)



これらの2つのスニペットは機能的に同じです。

最初のスニペット:

if 'sth' in request.POST:
    x = request.POST['sth']
else:
    x = -1


2番目のスニペット:

x = request.POST.get('sth', -1)

13
+1。.getがPython辞書のデフォルトの動作であることに言及してください。
トミーストランド

1
「これはPython辞書の動作であり、request.POSTに固有のものではありません」Pythonを使用した最初の日にこの回答を読んでいればよかったのですが... +1!
kikusin 2015

0

通常の辞書アクセスと.get()を使用したアクセスの主な違いは、

のようなものを使用 request.POST['sth']すると、重要なエラーが発生します。これは、ケットの「sth」が存在しない場合です。ただし、get()メソッドディクショナリを使用すると、エラー処理も向上します。

request.POST.get('sth')

キー「sthは存在しません」である場合はnoneを返します。また、get()に2番目のパラメーターを指定すると、デフォルト値として返されます。

data = request.POST.get('sth','my_default_value')

'sth'キーが存在しない場合、データの値はになりますmy_default_value。これは、通常の辞書アクセスよりもget()メソッドを使用する利点です。


2
この回答には、非常に賛成され受け入れられた回答にはまだ含まれていないものが何が示されていますか?
Stephen Rauch 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.