Метод urlencode

Метод urlencode применяется к объекту QueryDict и возвращает строку, в которой все ключи и значения преобразованы в формат URL-кодирования. Этот метод полезен для формирования строки запроса (query string) из данных, полученных от пользователя или из других источников. Он позволяет передавать сложные структуры данных через URL, правильно экранируя специальные символы.

Метод принимает два необязательных параметра: safe, который определяет символы, не подлежащие экранированию, и doseq, который управляет обработкой списков значений. По умолчанию safe содержит символ '/', а doseq установлен в False.

Синтаксис

pythonquery_dict.urlencode(safe='/', doseq=False)

Пример

Давайте создадим объект QueryDict с данными пользователя и преобразуем его в URL-строку:

pythonfrom 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)

Результат выполнения кода:

python"username=john_doe&age=25&city=New+York"

Пример

Рассмотрим обработку списков значений с параметром doseq:

pythonfrom 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)

Результат выполнения кода:

python"Without doseq: tags=python&tags=django&tags=web&category=programming"
"With doseq: tags=python&tags=django&tags=web&category=programming"

Пример

Использование параметра safe для сохранения специальных символов:

pythonfrom 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)

Результат выполнения кода:

python"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-запроса в строку запроса для перенаправления:

pythonfrom 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')

Результат выполнения кода при отправке формы:

python"GET /results/?name=John&email=john%40example.com&age=30"

Смотрите также

  • метод get,
    который получает значение ключа из QueryDict
  • метод getlist,
    который возвращает список значений для указанного ключа
  • атрибут GET,
    который содержит все GET-параметры запроса
  • атрибут POST,
    который содержит все POST-параметры запроса