Parâmetros de String de Consulta no Django
No desenvolvimento web com Django, é essencial compreender a diferença entre os parâmetros transmitidos pela URL e aqueles enviados por meio de uma string de consulta. Por exemplo:
Por exemplo, no endereço:
http://127.0.0.1:8000/index/3/Tom/
os segmentos finais, 3/Tom/
, são interpretados como parâmetros da URL (ou parâmetros de rota). Já no endereço:
http://127.0.0.1:8000/index?id=3&name=Tom
os valores 3
e Tom
são transmitidos como parâmetros de string de consulta (ou query string).
A string de consulta inicia após o caractere de interrogação (?
). Cada parâmetro é formado por um par chave-valor. Por exemplo, em id=3
, id
é a chave, enquanto 3
é o valor. Parâmetros múltiplos são separados pelo caractere &
(ampersand).
Para acessar os valores de parâmetros de string de consulta em Django, o método request.GET.get()
é utilizado. Esse método aceita como argumento o nome do parâmetro cujo valor se deseja obter.
Exemplo Prático
No arquivo views.py
, o seguinte código define duas funções:
from django.http import HttpResponse
def index(request):
return HttpResponse("<h2>Página Principal</h2>")
def user(request):
age = request.GET.get("age")
name = request.GET.get("name")
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")
A função user
extrai os valores dos parâmetros age
e name
presentes na string de consulta.
No arquivo urls.py
, a configuração de rotas pode ser feita da seguinte forma:
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
path("user/", views.user)
]
Ao acessar o endereço:
http://127.0.0.1:8000/user/?name=Tom&age=22
os parâmetros name
e age
serão preenchidos com os valores "Tom"
e 22
, respectivamente. Esses valores serão exibidos na resposta da aplicação.
Definindo Valores Padrão
Quando um parâmetro esperado não é fornecido, é possível atribuir um valor padrão. Isso é feito passando um segundo argumento para o método request.GET.get()
.
Por exemplo, a função user
pode ser ajustada para fornecer valores padrão:
from django.http import HttpResponse
def index(request):
return HttpResponse("<h2>Página Principal</h2>")
def user(request):
age = request.GET.get("age", 0)
name = request.GET.get("name", "Indefinido")
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")
Nesse código, se o parâmetro name
não for fornecido, ele será definido como "Indefinido"
. Da mesma forma, se o parâmetro age
estiver ausente, ele será preenchido com o valor 0
.
Assim, ao acessar:
http://127.0.0.1:8000/user/
a aplicação exibirá:
Nome: Indefinido Idade: 0
Documentação oficial: