Atualmente, estou definindo expressões regulares para capturar parâmetros em um URL, conforme descrito no tutorial. Como acesso parâmetros da URL como parte do HttpRequest
objeto? Meu HttpRequest.GET
atualmente retorna um QueryDict
objeto vazio .
Eu gostaria de aprender como fazer isso sem uma biblioteca para que eu possa conhecer melhor o Django.
self.kwargs['parameter']
Para esclarecer a explicação do camflan, vamos supor que você tenha
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
A regra do expedidor de URL captura as partes do caminho da URL (aqui
"user/thaiyoshi/"
) e as passa para a função de visualização junto com o objeto de solicitação.A string de consulta (aqui
message=Hi
) é analisada e os parâmetros são armazenados como umQueryDict
inrequest.GET
. Nenhuma correspondência ou processamento adicional para os parâmetros HTTP GET é feito.Essa função de exibição usaria as duas partes extraídas do caminho da URL e um parâmetro de consulta:
Como observação, você encontrará o método de solicitação (neste caso
"GET"
, e para os formulários enviados normalmente"POST"
) emrequest.method
. Em alguns casos, é útil verificar se corresponde ao que você está esperando.Atualização: Ao decidir se deseja usar o caminho da URL ou os parâmetros de consulta para transmitir informações, o seguinte pode ajudar:
/blog/post/15/
(não/blog/posts/?id=15
)/blog/post/15/?show_comments=1
ou/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
fonte
Usando GET
Usando POST
fonte
KeyError
exceções no caso de falta de uma chave. Seria sensato fazer o mesmo (por exemplorequest.POST.get('id', '')
).fonte
Para situações em que você só tem o
request
objeto, pode usarrequest.parser_context['kwargs']['your_param']
fonte
Eu gostaria de adicionar uma opção minha aqui. Alguém gostaria de saber como definir o caminho em urls.py, como
para que pudéssemos chamar a consulta.
O fato é que NÃO é necessário definir essa rota em urls.py. O que você precisa definir é apenas a rota em urls.py
e quando introduzir http: // servername: port / domínio / pesquisa / q = CA . A parte da consulta '? Q = CA' será automaticamente reservada na tabela de hash que você pode referenciar
Aqui está um exemplo (views.py)
Além disso, quando você escreve uma string de consulta no URL
Não coloque a string de consulta entre aspas, por exemplo
fonte
Gostaria de compartilhar uma dica que pode economizar algum tempo.
Se você planeja usar algo parecido com isto em seu
urls.py
arquivo:O que basicamente significa
www.example.com/<username>
. Não se esqueça de colocá-lo no final de suas entradas de URL, pois, caso contrário, é provável que cause conflitos com as entradas de URL a seguir, ou seja, acessar uma delas causará o erro de erro:User matching query does not exist.
acabei de experimentar; espero que ajude!
fonte
Você tem duas maneiras comuns de fazer isso, caso seu URL seja assim:
v1:
Se chave específica é obrigatória, você pode usar:
Isso retornará um valor de
a
if key e uma exceção, se não existir.v2:
Se suas chaves são opcionais:
Você pode tentar que, sem qualquer argumento, isso não trava. Então você pode envolvê-lo
try: except:
e retornarHttpResponseBadRequest()
no exemplo. Essa é uma maneira simples de tornar seu código menos complexo, sem usar o tratamento de exceções especiais.fonte
Isso não é exatamente o que você pediu, mas esse trecho é útil para a gestão
query_strings
emtemplates
.fonte
Atualmente, essas consultas são feitas de duas maneiras. Se você deseja acessar os parâmetros de consulta (GET), pode consultar o seguinte:
Se você deseja acessar os parâmetros passados pelo POST, é necessário acessar desta maneira:
Acessando o dicionário (QueryDict) com 'get ()', você pode definir um valor padrão. Nos casos acima, se 'status' ou 'role' não forem informados, os valores serão Nenhum.
fonte
Esta é outra solução alternativa que pode ser implementada:
na configuração do URL. :
nas visualizações:
fonte