request.POST.get ('sth') vs request.POST ['sth'] - różnica?

84

Jaka jest różnica pomiędzy

request.POST.get('sth')

i

request.POST['sth']

Nie znalazłem podobnego pytania, oba działają u mnie tak samo, przypuszczam, że mogę ich używać osobno ale może się mylę, dlatego pytam. Jakieś pomysły?

danb333
źródło

Odpowiedzi:

195

request.POST['sth']zgłosi KeyErrorwyjątek, jeśli go 'sth'nie ma request.POST.

request.POST.get('sth')wróci, Nonejeśli go 'sth'nie ma request.POST.

Dodatkowo .getpozwala na podanie dodatkowego parametru o wartości domyślnej, która jest zwracana, jeśli klucza nie ma w słowniku. Na przykład,request.POST.get('sth', 'mydefaultvalue')

Jest to zachowanie dowolnego słownika Pythona i nie jest specyficzne dla request.POST.



Te dwa fragmenty są funkcjonalnie identyczne:

Pierwszy fragment:

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


Drugi fragment:

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



Te dwa fragmenty są funkcjonalnie identyczne:

Pierwszy fragment:

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


Drugi fragment:

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



Te dwa fragmenty są funkcjonalnie identyczne:

Pierwszy fragment:

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


Drugi fragment:

x = request.POST.get('sth', -1)
dgel
źródło
13
+1. Za wspomnienie, że .get jest domyślnym zachowaniem dla słowników Pythona.
Tommy Strand
1
„To jest zachowanie każdego słownika Pythona i nie jest specyficzne dla request.POST” Żałuję, że nie czytałem tej odpowiedzi pierwszego dnia z Pythonem ... +1!
kikusin
0

Główna różnica między zwykłym dostępem do słowników a dostępem do niego za pomocą .get () jest taka

Przy użyciu czegoś podobnego request.POST['sth']wystąpi błąd klucza, jeśli ket „sth” nie istnieje. Jednak użycie słowników metody get () zapewnia lepszą obsługę błędów

request.POST.get('sth')

zwróci none, czyli klucz „sth nie istnieje”, a także, podając drugi parametr funkcji get (), zwróci go jako wartość domyślną.

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

jeśli klucz „sth” nie istnieje, wartość w danych będzie my_default_value. To przewaga używania metody get () nad zwykłym dostępem do słowników.

rupanshu verma
źródło
2
Co jest przedstawione w tej odpowiedzi, czego nie ma już w wysoko ocenianej i akceptowanej odpowiedzi?
Stephen Rauch