Je dois obtenir la chaîne de requête à partir de cette URL https://stackoverflow.com/questions/ask?next=1&value=3 et je ne souhaite pas utiliser request.META . J'ai découvert qu'il y avait deux autres moyens d'obtenir la chaîne de requête:
Utilisation de urlparse Urlparse.urlparse (url) .query
Utilisation de l'URL encoder Utilisez urlencode et transmettez-y le dictionnaire request.GET params pour obtenir la représentation sous forme de chaîne.
Alors, quelle est la meilleure? Mes collègues préfèrent le code URL mais n’ont pas fourni d’explication satisfaisante. Ils affirment que urlparse appelle urlencode en interne, ce dont je ne suis pas sûr, car je ne suis pas sûr, puisque urlencode réside dans le module urllib.
Vous pouvez créer une chaîne de requête en utilisant des paramètres GET comme celui-ci
request.GET.urlencode()
Cela n'inclut pas le préfixe ?
et ne peut pas renvoyer les clés dans le même ordre que dans la demande d'origine.
Troisième option:
>>> 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+, cela est disponible en tant que:
from urllib.parse import parse_qs
Je préfère utiliser
request.META['QUERY_STRING']
De docs:
https://docs.djangoproject.com/fr/stable/ref/request-response/#Django.http.HttpRequest.META
Cela n'inclut pas le préfixe ?
.
vous pouvez également utiliser request.arg aussi
if 'next' in request.arg and 'values' in request.arg:
next = request.arg.get('next', '')
value = request.arg.get('value', '')