Метод urlencode
Метод urlencode применяется к объекту QueryDict и возвращает строку, в которой все ключи и значения преобразованы в формат URL-кодирования. Этот метод полезен для формирования строки запроса (query string) из данных, полученных от пользователя или из других источников. Он позволяет передавать сложные структуры данных через URL, правильно экранируя специальные символы.
Метод принимает два необязательных параметра: safe, который определяет символы, не подлежащие экранированию, и doseq, который управляет обработкой списков значений. По умолчанию safe содержит символ '/', а doseq установлен в False.
Синтаксис
query_dict.urlencode(safe='/', doseq=False)
Пример
Давайте создадим объект QueryDict с данными пользователя и преобразуем его в URL-строку:
from django.http import QueryDict
# Create QueryDict with user data
data = QueryDict('', mutable=True)
data['username'] = 'john_doe'
data['age'] = '25'
data['city'] = 'New York'
# Encode to URL string
res = data.urlencode()
print(res)
Результат выполнения кода:
"username=john_doe&age=25&city=New+York"
Пример
Рассмотрим обработку списков значений с параметром doseq:
from django.http import QueryDict
# Create QueryDict with multiple values
data = QueryDict('', mutable=True)
data.setlist('tags', ['python', 'django', 'web'])
data['category'] = 'programming'
# Encode with doseq=False (default)
res1 = data.urlencode()
print("Without doseq:", res1)
# Encode with doseq=True
res2 = data.urlencode(doseq=True)
print("With doseq:", res2)
Результат выполнения кода:
"Without doseq: tags=python&tags=django&tags=web&category=programming"
"With doseq: tags=python&tags=django&tags=web&category=programming"
Пример
Использование параметра safe для сохранения специальных символов:
from django.http import QueryDict
# Create QueryDict with special characters
data = QueryDict('', mutable=True)
data['path'] = '/api/v1/users/'
data['query'] = 'search?q=django&page=1'
# Default encoding (safe='/')
res1 = data.urlencode()
print("Default safe:", res1)
# Custom safe characters
res2 = data.urlencode(safe='/?=&')
print("Custom safe:", res2)
Результат выполнения кода:
"Default safe: path=/api/v1/users/&query=search%3Fq%3Ddjango%26page%3D1"
"Custom safe: path=/api/v1/users/&query=search?q=django&page=1"
Пример
Преобразование данных из POST-запроса в строку запроса для перенаправления:
from django.http import QueryDict, HttpResponseRedirect
from django.shortcuts import render
def process_form(request):
if request.method == 'POST':
# Get POST data as QueryDict
post_data = request.POST
# Convert to URL encoded string
query_string = post_data.urlencode()
# Redirect with query parameters
return HttpResponseRedirect(f'/results/?{query_string}')
return render(request, 'form.html')
Результат выполнения кода при отправке формы:
"GET /results/?name=John&email=john%40example.com&age=30"