python django comparison urlencode urlparse

python urldecode



¿La mejor manera de obtener una cadena de consulta desde una URL en Python? (4)

Prefiero usar

request.META[''QUERY_STRING'']

De docs:

https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpRequest.META

Esto no incluye el ? prefijo.

Necesito obtener la cadena de consulta de esta URL https://stackoverflow.com/questions/ask?next=1&value=3 y no quiero usar request.META. Me he dado cuenta de que hay dos formas más de obtener la cadena de consulta:

  1. Usando urlparse urlparse.urlparse (url) .query

  2. Uso de la codificación url Use urlencode y pase la solicitud. CONSIGA el diccionario de parámetros para obtener la representación de la cadena.

Entonces, ¿qué camino es mejor? Mis colegas prefieren urlencode pero no han proporcionado una explicación satisfactoria. Afirman que urlparse llama a urlencode internamente, lo cual es algo de lo que no estoy seguro ya que urlencode vive en el módulo urllib.


Puedes hacer una cadena de consulta usando parámetros GET como este

request.GET.urlencode()

Esto no incluye el ? prefijo, y no puede devolver las claves en el mismo orden que en la solicitud original.


También puedes usar request.arg también

if ''next'' in request.arg and ''values'' in request.arg: next = request.arg.get(''next'', '''') value = request.arg.get(''value'', '''')


Tercera opción:

>>> from urlparse import urlparse, parse_qs >>> url = ''http://something.com?blah=1&x=2'' >>> urlparse(url).query ''blah=1&x=2'' >>> parse_qs(urlparse(url).query) {''blah'': [''1''], ''x'': [''2'']}

En Python 3+ esto está disponible como:

from urllib.parse import parse_qs

Documentación para urllib.parse