web-dev-qa-db-ja.com

PythonでURLからクエリ文字列を取得する最良の方法は?

このURLからクエリ文字列を取得する必要があります https://stackoverflow.com/questions/ask?next=1&value= を使用しません request.META 。クエリ文字列を取得するには、さらに2つの方法があることがわかりました。

  1. urlparseurlparse.urlparse(url).queryの使用

  2. url encodeの使用urlencodeを使用し、request.GET params辞書をその中に渡して、文字列表現を取得します。

どちらの方法が良いですか?私の同僚はurlencodeを好みますが、満足のいく説明を提供していません。彼らは、urlparseが内部的にurlencodeを呼び出していると主張していますが、これはurlencodeがurllibモジュールに住んでいるので、私にはわかりません。

29
NIlesh Sharma

このようなGETパラメーターを使用してクエリ文字列を作成できます

request.GET.urlencode()

これには?プレフィックスが含まれず、元のリクエストと同じ順序でキーを返さない場合があります。

52
Qasim Khan

3番目のオプション:

>>> 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']}

Python 3+でこれは次のように利用可能です:

from urllib.parse import parse_qs

rllib.parseのドキュメント

56
Jon Clements

使用したい

request.META['QUERY_STRING']

ドキュメントから:

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

これには、?プレフィックスは含まれません。

41
mynameistechno

request.argも使用できます

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