97 votes

request.POST.get('sth') vs request.POST['sth'] - différence ?

Quelle est la différence entre

request.POST.get('sth')

y

request.POST['sth']

Je n'ai pas trouvé la question similaire, les deux fonctionnent de la même manière pour moi, je suppose que je peux les utiliser séparément mais peut-être que je me trompe, c'est pourquoi je demande. Avez-vous des idées ?

226voto

dgel Points 5372

request.POST['sth'] soulèvera un KeyError exception si 'sth' n'est pas dans request.POST .

request.POST.get('sth') retournera None si 'sth' n'est pas dans request.POST .

En outre, .get vous permet de fournir un paramètre supplémentaire d'une valeur par défaut qui est retournée si la clé n'est pas dans le dictionnaire. Par exemple, request.POST.get('sth', 'mydefaultvalue')

Ceci est le comportement de tout dictionnaire python et n'est pas spécifique à request.POST .


Ces deux extraits sont fonctionnellement identiques :

Premier extrait :

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

Deuxième extrait :

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

Ces deux extraits sont fonctionnellement identiques :

Premier extrait :

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

Deuxième extrait :

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

Ces deux extraits sont fonctionnellement identiques :

Premier extrait :

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

Deuxième extrait :

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

2voto

Ashish Gupta Points 447

Exemple de Request.POST

req.POST['name_your_desired_field'] 

Une exception KeyError sera levée si 'name_your_desired_field' ne figure pas dans req.POST.

request.POST.get('name_your_desired_field') 

La réponse sera None si 'name_your_desired_field' ne figure pas dans req.POST.

Cependant, .get vous permet de fournir un paramètre supplémentaire d'une valeur par défaut qui est retournée si la clé n'est pas dans le dictionnaire. Par exemple,

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

C'est le comportement de tout dictionnaire python et n'est pas spécifique à req.POST

Exemple de Request.GET

request.GET.get('name_your_desired_field') 

La réponse sera None si 'name_your_desired_field' ne figure pas dans req.GET.

Toutefois, .get vous permet de fournir un paramètre supplémentaire, à savoir une valeur par défaut qui sera renvoyée si la clé ne figure pas dans le dictionnaire. Par exemple,

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

C'est le comportement de tout dictionnaire python et n'est pas spécifique à req.GET

0voto

rupanshu verma Points 11

La principale différence entre l'accès normal aux dictionnaires et l'accès avec .get() est que

Avec en utilisant quelque chose comme request.POST['sth'] entraînera une erreur majeure si le ket 'sth' n'existe pas. Mais l'utilisation de la méthode get() des dictionnaires vous permettra également une meilleure gestion des erreurs

request.POST.get('sth')

ne retournera rien si la clé est "qqch n'existe pas". et aussi en donnant le deuxième paramètre à get(), il retournera avec lui comme valeur par défaut.

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

si la clé 'qqch' n'existe pas, la valeur dans les données sera my_default_value . C'est l'avantage d'utiliser la méthode get() par rapport à l'accès normal aux dictionnaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X