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?
Odpowiedzi:
request.POST['sth']
zgłosi KeyError
wyjątek, jeśli go 'sth'
nie ma request.POST
.
request.POST.get('sth')
wróci, None
jeśli go 'sth'
nie ma request.POST
.
Dodatkowo .get
pozwala 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
.
Pierwszy fragment:
try:
x = request.POST['sth']
except KeyError:
x = None
Drugi fragment:
x = request.POST.get('sth')
Pierwszy fragment:
try:
x = request.POST['sth']
except KeyError:
x = -1
Drugi fragment:
x = request.POST.get('sth', -1)
Pierwszy fragment:
if 'sth' in request.POST:
x = request.POST['sth']
else:
x = -1
Drugi fragment:
x = request.POST.get('sth', -1)
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.