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? Mi HttpRequest.GET
actualmente devuelve un QueryDict
objeto vacío .
Me gustaría aprender cómo hacer esto sin una biblioteca para poder conocer mejor a Django.
self.kwargs['parameter']
Para aclarar la explicación de camflan, supongamos que tiene
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
La regla del despachador de URL capturará partes de la ruta de URL (aquí
"user/thaiyoshi/"
) y las pasará a la función de visualización junto con el objeto de solicitud.La cadena de consulta (en este caso
message=Hi
) se analiza y parámetros se almacenan comoQueryDict
enrequest.GET
. No se realizan más coincidencias ni procesos 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:
Como nota al margen, encontrará el método de solicitud (en este caso
"GET"
, y para los formularios enviados generalmente"POST"
) enrequest.method
. En algunos casos es útil verificar que coincida con lo que espera.Actualización: Al decidir si usar la ruta URL o los parámetros de consulta para pasar información, lo siguiente puede ayudar:
/blog/post/15/
(no/blog/posts/?id=15
)/blog/post/15/?show_comments=1
o/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
fuente
Usando GET
Usando POST
fuente
KeyError
excepciones en el caso de que falte una clave. Sería prudente hacer lo mismo (por ejemplorequest.POST.get('id', '')
).fuente
Para situaciones en las que solo tiene el
request
objeto que puede usarrequest.parser_context['kwargs']['your_param']
fuente
Me gustaría agregar alguna opción de mí mismo aquí. Alguien se preguntaría cómo establecer la ruta en urls.py, como
para que podamos invocar la consulta.
El hecho es que NO es necesario establecer dicha ruta en urls.py. Lo que necesita establecer es solo la ruta en urls.py
y cuando se introduce http: // servidor: puerto / Dominio / Búsqueda / q = CA . La parte de consulta '? Q = CA' se reservará automáticamente en la tabla hash a la que puede hacer referencia
Aquí hay un ejemplo (views.py)
Además, cuando escribe una cadena de consulta en la URL
No ajuste la cadena de consulta entre comillas, p. Ej.
fuente
Me gustaría compartir un consejo que puede ahorrarle algo de tiempo.
Si planea usar algo como esto en su
urls.py
archivo:Lo que básicamente significa
www.example.com/<username>
. Asegúrese de colocarlo al final de sus entradas de URL, porque de lo contrario, es probable que cause conflictos con las entradas de URL que siguen a continuación, es decir, acceder a una de ellas le dará el bonito error:User matching query does not exist.
acabo de experimentarlo yo mismo; ¡Espero eso ayude!
fuente
Tiene dos formas comunes de hacerlo en caso de que su URL se vea así:
v1:
Si la clave específica es obligatoria, puede usar:
Esto devolverá un valor de
a
si la clave existe y una excepción si no.v2:
Si sus llaves son opcionales:
Puede intentarlo sin ningún argumento, esto no se bloqueará. Para que pueda envolverlo
try: except:
y volver,HttpResponseBadRequest()
por ejemplo. Esta es una manera simple de hacer que su código sea menos complejo, sin usar el manejo de Excepciones especiales.fuente
Esto no es exactamente lo que pidieron, pero este fragmento es útil para la gestión
query_strings
detemplates
.fuente
Estas consultas se realizan actualmente de dos maneras. Si desea acceder a los parámetros de consulta (GET), puede consultar lo siguiente:
Si desea acceder a los parámetros pasados por POST, debe acceder de esta manera:
Accediendo al diccionario (QueryDict) con 'get ()', puede establecer un valor predeterminado. En los casos anteriores, si no se informa el "estado" o el "rol", los valores son Ninguno.
fuente
Esta es otra solución alternativa que se puede implementar:
en la url config. :
en las vistas:
fuente