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

83

Cuál es la diferencia entre

request.POST.get('sth')

y

request.POST['sth']

No encontré la pregunta similar, ambas funcionan igual para mí, supongo que puedo usarlas por separado pero tal vez me equivoque, por eso estoy preguntando. ¿Algunas ideas?

danb333
fuente

Respuestas:

193

request.POST['sth']generará una KeyErrorexcepción si 'sth'no está en request.POST.

request.POST.get('sth')Regresará Nonesi 'sth'no está en request.POST.

Además, le .getpermite proporcionar un parámetro adicional de un valor predeterminado que se devuelve si la clave no está en el diccionario. Por ejemplo,request.POST.get('sth', 'mydefaultvalue')

Este es el comportamiento de cualquier diccionario de Python y no es específico de request.POST.



Estos dos fragmentos son funcionalmente idénticos:

Primer fragmento:

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


Segundo fragmento:

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



Estos dos fragmentos son funcionalmente idénticos:

Primer fragmento:

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


Segundo fragmento:

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



Estos dos fragmentos son funcionalmente idénticos:

Primer fragmento:

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


Segundo fragmento:

x = request.POST.get('sth', -1)
dgel
fuente
13
+1. Por mencionar que .get es el comportamiento predeterminado de los diccionarios de Python.
Tommy Strand
1
"Este es el comportamiento de cualquier diccionario de Python y no es específico para request.POST" Ojalá hubiera leído esta respuesta mi primer día con Python ... ¡+1!
kikusin
0

La principal diferencia entre el acceso normal a los diccionarios y el acceso con .get () es que

Con el uso de algo como request.POST['sth'], surgirá un error clave si el ket 'sth' no existe. Pero el uso de diccionarios del método get () también le proporcionará un mejor manejo de errores

request.POST.get('sth')

devolverá ninguno es la clave 'sth no existe' y también al dar el segundo parámetro para get () volverá con él como valor predeterminado.

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

si la clave 'sth' no existe, el valor en los datos será my_default_value. Esa es la ventaja de usar el método get () sobre el acceso normal a los diccionarios.

rupanshu verma
fuente
2
¿Qué se presenta en esta respuesta que no esté ya en la respuesta altamente votada y aceptada?
Stephen Rauch