Подтвердить что ты не робот

Request.POST.get('sth') vs request.POST ['sth'] - разница?

В чем разница между

request.POST.get('sth')

и

request.POST['sth']

Не нашел подобный вопрос, оба работают одинаково для меня, предположим, что я могу использовать их отдельно, но, возможно, я ошибаюсь, поэтому я спрашиваю. Любые идеи?

4b9b3361

Ответ 1

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)

Ответ 2

Основное различие между доступными нормальными словарями и доступом к нему с помощью .get() заключается в том, что

С используя что-то вроде request.POST['sth'] возникает ключевая ошибка, если ket 'sth' не существует. Но использование словарей метода get() также обеспечит лучшую обработку ошибок

request.POST.get('sth')

вернет none, ключ "sth не существует" а также путем предоставления второго параметра get() возвратит с ним значение по умолчанию.

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

Если ключ `sth 'не существует, значение в данных будет my_default_value. Это преимущество использования метода get() над нормальными словарями.