Яка різниця між
request.POST.get('sth')
і
request.POST['sth']
Не знайшов подібного питання, обидва працюють однаково для мене, припустимо, я можу використовувати їх окремо, але, можливо, я помиляюся, саме тому я і запитую. Будь-які ідеї?
Відповіді:
request.POST['sth']
викличе KeyError
виняток, якщо 'sth'
не в request.POST
.
request.POST.get('sth')
повернеться, None
якщо 'sth'
немає в request.POST
.
Крім того, .get
дозволяє вказати додатковий параметр значення за замовчуванням, який повертається, якщо ключа немає у словнику. Наприклад,request.POST.get('sth', 'mydefaultvalue')
Це поведінка будь-якого словника python і не є специфічним для request.POST
.
Перший фрагмент:
try:
x = request.POST['sth']
except KeyError:
x = None
Другий фрагмент:
x = request.POST.get('sth')
Перший фрагмент:
try:
x = request.POST['sth']
except KeyError:
x = -1
Другий фрагмент:
x = request.POST.get('sth', -1)
Перший фрагмент:
if 'sth' in request.POST:
x = request.POST['sth']
else:
x = -1
Другий фрагмент:
x = request.POST.get('sth', -1)
Основна різниця між доступом до звичайних словників та доступом до нього за допомогою .get () полягає в тому, що
При використанні чогось подібного
request.POST['sth']
виникає ключова помилка, якщо кет 'sth' не існує. Але використання словників методу get () також забезпечить вам кращу обробку помилок
request.POST.get('sth')
поверне none - це ключ 'sth не існує', а також, вказавши другий параметр get (), повернеться з ним як значення за замовчуванням.
data = request.POST.get('sth','my_default_value')
якщо ключ "sth" не існує, значення в даних буде my_default_value
. Це перевага використання методу get () перед звичайним доступом до словників.