request.POST.get ('etw') vs request.POST ['etw'] - Unterschied?

82

Was ist der Unterschied zwischen

request.POST.get('sth')

und

request.POST['sth']

Habe die ähnliche Frage nicht gefunden, beide funktionieren für mich gleich, nehme an, ich kann sie separat verwenden, aber vielleicht irre ich mich, deshalb frage ich. Irgendwelche Ideen?

danb333
quelle

Antworten:

191

request.POST['sth']wird eine KeyErrorAusnahme auslösen, wenn 'sth'nicht in request.POST.

request.POST.get('sth')wird zurückkehren, Nonewenn 'sth'nicht in request.POST.

Darüber hinaus .getkönnen Sie einen zusätzlichen Parameter für einen Standardwert angeben, der zurückgegeben wird, wenn sich der Schlüssel nicht im Wörterbuch befindet. Zum Beispiel,request.POST.get('sth', 'mydefaultvalue')

Dies ist das Verhalten eines Python-Wörterbuchs und nicht spezifisch für request.POST.



Diese beiden Schnipsel sind funktional identisch:

Erster Ausschnitt:

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


Zweiter Ausschnitt:

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



Diese beiden Schnipsel sind funktional identisch:

Erster Ausschnitt:

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


Zweiter Ausschnitt:

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



Diese beiden Schnipsel sind funktional identisch:

Erster Ausschnitt:

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


Zweiter Ausschnitt:

x = request.POST.get('sth', -1)
dgel
quelle
11
+1. Um zu erwähnen, dass .get das Standardverhalten für Python-Wörterbücher ist.
Tommy Strand
1
"Dies ist das Verhalten eines Python-Wörterbuchs und nicht spezifisch für eine Anfrage. POST" Ich wünschte, ich hätte diese Antwort an meinem ersten Tag mit Python gelesen ... +1!
Kikusin
0

Der Hauptunterschied zwischen dem Zugriff auf normale Wörterbücher und dem Zugriff mit .get () besteht darin, dass

Bei der Verwendung von etwas wie request.POST['sth']wird ein Schlüsselfehler auftreten, wenn der Ket 'etw' nicht existiert. Die Verwendung von get () -Methodenwörterbüchern bietet Ihnen jedoch auch eine bessere Fehlerbehandlung

request.POST.get('sth')

wird keine zurückgeben ist der Schlüssel 'etw existiert nicht' und auch durch Angabe des zweiten Parameters wird get () als Standardwert zurückgegeben.

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

Wenn der Schlüssel 'etw' nicht vorhanden ist, ist der Wert in den Daten my_default_value. Dies ist der Vorteil der Verwendung der Methode get () gegenüber dem normalen Zugriff auf Wörterbücher.

Rupanshu Verma
quelle
2
Was wird in dieser Antwort dargestellt, das nicht bereits in der hoch bewerteten und akzeptierten Antwort enthalten ist?
Stephen Rauch