¿Cómo obtener valores de solicitud GET en Django?
Actualmente estoy definiendo expresiones regulares para capturar parámetros en una URL, como se describe en el tutorial. ¿Cómo accedo a los parámetros desde la URL como parte del HttpRequest
objeto?
Actualmente devuelve HttpRequest.GET
un QueryDict
objeto vacío.
Me gustaría aprender a hacer esto sin una biblioteca, para poder conocer mejor a Django.
Cuando una URL es como domain/search/?q=haha
, usarías request.GET.get('q', '')
.
q
es el parámetro que desea y ''
es el valor predeterminado si q
no se encuentra.
Sin embargo, si simplemente está configurando su URLconf
**, entonces sus capturas de se regex
pasan a la función como argumentos (o argumentos con nombre).
Como:
(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),
Entonces en tu views.py
tendrías
def profile_page(request, username):
# Rest of the method
Para aclarar la explicación de camflan , supongamos que tiene
- la regla
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
- una solicitud entrante para
http://domain/user/thaiyoshi/?message=Hi
La regla del distribuidor de URL capturará partes de la ruta de la URL (aquí "user/thaiyoshi/"
) y las pasará a la función de visualización junto con el objeto de solicitud.
La cadena de consulta (aquí message=Hi
) se analiza y los parámetros se almacenan como un QueryDict
archivo request.GET
. No se realizan más coincidencias ni procesamiento para los parámetros HTTP GET.
Esta función de vista usaría ambas partes extraídas de la ruta URL y un parámetro de consulta:
def profile_page(request, username=None):
user = User.objects.get(username=username)
message = request.GET.get('message')
Como nota al margen, encontrará el método de solicitud (en este caso "GET"
y, por lo general, para los formularios enviados "POST"
) en request.method
. En algunos casos, es útil comprobar que coincide con lo esperado.
Actualización: al decidir si utilizar la ruta URL o los parámetros de consulta para pasar información, lo siguiente puede ayudar:
- utilice la ruta URL para identificar recursos de forma única, por ejemplo
/blog/post/15/
(no/blog/posts/?id=15
) - utilizar parámetros de consulta para cambiar la forma en que se muestra el recurso, por ejemplo,
/blog/post/15/?show_comments=1
o/blog/posts/2008/?sort_by=date&direction=desc
- Para crear URL amigables para los humanos, evite usar números de identificación y use, por ejemplo, fechas, categorías y/o slugs:
/blog/post/2008/09/30/django-urls/
Usando OBTENER
request.GET["id"]
Usando la publicación
request.POST["id"]