template - request get django



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

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 estoy equivocado, es por eso que estoy preguntando. ¿Algunas ideas?


Answer #1

La principal diferencia entre el acceso a diccionarios normales y el acceso a él 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 los métodos de 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 a get () regresará con él como un valor predeterminado.

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

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


Answer #2

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

request.POST.get('sth') devolverá None si 'sth' no está en request.POST .

Además, .get permite 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)




django