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

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 encoding 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.

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

Prefiero usar

 request.META['QUERY_STRING'] 

De los documentos:

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

Esto no incluye el ? prefijo.

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