Solicitud de Django obtener parámetros

84

En una solicitud de Django tengo lo siguiente:

POST:<QueryDict: {u'section': [u'39'], u'MAINS': [u'137']}>

¿Cómo obtengo los valores de sectiony MAINS?

if request.method == 'GET':
    qd = request.GET
elif request.method == 'POST':
    qd = request.POST

section_id = qd.__getitem__('section') or getlist....
Casco
fuente
7
Nunca invoques uno de los métodos mágicos directamente. Utilice siempre la función de ayuda adecuada.
Ignacio Vazquez-Abrams
k ¿hay alguna forma de decodificar secciones?
Hulk
1
Lea la documentación de django sobre estos objetos: docs.djangoproject.com/en/dev/ref/request-response/… . Hay algunas diferencias en comparación con dict en Python.
Esquí

Respuestas:

90

Puede utilizar []para extraer valores de un QueryDictobjeto como lo haría con cualquier diccionario ordinario.

# HTTP POST variables
request.POST['section'] # => [39]
request.POST['MAINS'] # => [137]

# HTTP GET variables
request.GET['section'] # => [39]
request.GET['MAINS'] # => [137]

# HTTP POST and HTTP GET variables (Deprecated since Django 1.7)
request.REQUEST['section'] # => [39]
request.REQUEST['MAINS'] # => [137]
Johannes Gorset
fuente
9
solo una pista después de todos estos años: request.REQUEST mientras tanto está en desuso
aronadaal
189

También puede utilizar:

request.POST.get('section','') # => [39]
request.POST.get('MAINS','') # => [137] 
request.GET.get('section','') # => [39]
request.GET.get('MAINS','') # => [137]

Usar esto asegura que no obtenga un error. Si los datos POST / GET con cualquier clave no están definidos, en lugar de generar una excepción, se usará el valor de respaldo (se usará el segundo argumento de .get ()).

crodjer
fuente
1
¡Definitivamente la forma más robusta!
d-coder