request.POST.get('sth') vs request.POST['sth'] - difference?

Django

Django Problem Overview


What is the difference between

request.POST.get('sth')

and

request.POST['sth']

Did not find the similar question, both work the same for me, suppose I can use them separately but maybe I am wrong, that is why I am asking. Any ideas?

Django Solutions


Solution 1 - Django

request.POST['sth'] will raise a KeyError exception if 'sth' is not in request.POST.

request.POST.get('sth') will return None if 'sth' is not in request.POST.

Additionally, .get allows you to provide an additional parameter of a default value which is returned if the key is not in the dictionary. For example, request.POST.get('sth', 'mydefaultvalue')

This is the behavior of any python dictionary and is not specific to request.POST.



These two snippets are functionally identical:

First snippet:

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


Second snippet:

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



These two snippets are functionally identical:

First snippet:

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


Second snippet:

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



These two snippets are functionally identical:

First snippet:

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


Second snippet:

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

Solution 2 - Django

Request.POST Example

req.POST['name_your_desired_field'] 

This will throw a KeyError exception if 'name_your_desired_field' is not in req.POST.

request.POST.get('name_your_desired_field') 

This will return None if 'name_your_desired_field' is not in req.POST.

Although, .get allows you to provide an additional parameter of a default value which is returned if the key is not in the dictionary. For example,

req.POST.get('name_your_desired_field', 'your_default_value')

This is the behavior of any python dictionary and is not specific to req.POST

Request.GET Example

request.GET.get('name_your_desired_field') 

This will return None if 'name_your_desired_field' is not in req.GET.

Allthough, .get allows you to provide an additional parameter of a default value which is returned if the key is not in the dictionary. For example,

req.GET.get('name_your_desired_field', 'your_default_value')

This is the behavior of any python dictionary and is not specific to req.GET

Solution 3 - Django

The main difference between normal dictionaries access and accessing it with .get() is that

With using something like request.POST['sth'] will arise a key error is if the ket 'sth' does not exist. But using get() method dictionaries will also provide you with better error handling

request.POST.get('sth')

will return none is the key 'sth does not exist' and also by giving the second parameter to get() will return with it as a default value.

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

if 'sth' key does not exist the value in data will be my_default_value. That's the advantage of using get() method over normal dictionaries access.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiondanb333View Question on Stackoverflow
Solution 1 - DjangodgelView Answer on Stackoverflow
Solution 2 - DjangoAshish GuptaView Answer on Stackoverflow
Solution 3 - Djangorupanshu vermaView Answer on Stackoverflow