回答:
urlが次のような場合:domain/search/?q=haha
、次にを使用しますrequest.GET.get('q', '')
。
q
は必要なパラメータであり、が見つからない''
場合のデフォルト値ですq
。
ただし、代わりにを構成するだけの場合はURLconf
、からのキャプチャregex
が引数(または名前付き引数)として関数に渡されます。
といった:
(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),
次に、あなたにviews.py
あなたが持っているでしょう
def profile_page(request, username):
# Rest of the method
self.kwargs['parameter']
camflanの説明を明確にするために、あなたが持っているとしましょう
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
URLディスパッチャールールは、URL パス(ここでは"user/thaiyoshi/"
)の一部をキャッチし、それらをリクエストオブジェクトと共にビュー関数に渡します。
クエリ文字列(ここmessage=Hi
)は解析され、パラメータはQueryDict
in として格納されますrequest.GET
。HTTP GETパラメーターのマッチングや処理はこれ以上行われません。
このビュー関数は、URLパスから抽出された両方の部分とクエリパラメータを使用します。
def profile_page(request, username=None):
user = User.objects.get(username=username)
message = request.GET.get('message')
補足として、リクエストメソッド(この場合は"GET"
、通常は送信されたフォーム"POST"
)はにありrequest.method
ます。場合によっては、期待したものと一致していることを確認すると役立つことがあります。
更新:情報を渡すためにURLパスとクエリパラメータのどちらを使用するかを決定するとき、次のことが役立つ場合があります。
/blog/post/15/
(例:(ではない/blog/posts/?id=15
))/blog/post/15/?show_comments=1
または/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
GETの使用
request.GET["id"]
POSTの使用
request.POST["id"]
KeyError
して、キーが欠落している場合の例外を回避しています。同じことをするのが賢明でしょう(例えばrequest.POST.get('id', '')
)。
request
使用できるオブジェクトしかない場合request.parser_context['kwargs']['your_param']
ここに自分のオプションを追加したいと思います。誰かがurls.pyにパスを設定する方法を疑問に思うでしょう、例えば
domain/search/?q=CA
クエリを呼び出すことができます。
実際には、urls.pyにそのようなルートを設定する必要はありません。設定する必要があるのはurls.pyのルートだけです
urlpatterns = [
path('domain/search/', views.CityListView.as_view()),
]
http:// servername:port / domain / search /?q = CAと入力した場合。クエリ部分 '?q = CA'は、参照できるハッシュテーブルに自動的に予約されます。
request.GET.get('q', None).
ここに例があります(views.py)
class CityListView(generics.ListAPIView):
serializer_class = CityNameSerializer
def get_queryset(self):
if self.request.method == 'GET':
queryset = City.objects.all()
state_name = self.request.GET.get('q', None)
if state_name is not None:
queryset = queryset.filter(state__name=state_name)
return queryset
また、URLにクエリ文字列を書き込む場合
http://servername:port/domain/search/?q=CA
クエリ文字列を引用符で囲まないでください。
http://servername:port/domain/search/?q="CA"
時間を節約できるヒントを共有したいと思います。
このようなものをurls.py
ファイルで使用する場合:
url(r'^(?P<username>\w+)/$', views.profile_page,),
それは基本的に意味しwww.example.com/<username>
ます。それ以外の場合は、彼らの下のフォロー、すなわちアクセス1は、そのURLのエントリを持つ原因の競合を起こしやすいので、あなたのURLエントリの最後にそれを置くようにしてくださいますあなたに素敵なエラーを与える:User matching query does not exist.
私はちょうどそれを自分自身を経験してきました。それが役に立てば幸い!
URLが次のようになっている場合に備えて、2つの一般的な方法があります。
https://domain/method/?a=x&b=y
v1:
特定のキーが必須の場合は、以下を使用できます。
key_a = request.GET['a']
これはa
、キーが存在する場合は値を返し、存在しない場合は例外を返します。
v2:
キーがオプションの場合:
request.GET.get('a')
引数なしで試すことができますが、これはクラッシュしません。したがって、それをラップして例にtry: except:
戻ることができますHttpResponseBadRequest()
。これは、特別な例外処理を使用せずに、コードを単純にする簡単な方法です。
これらのクエリは現在2つの方法で実行されます。クエリパラメータ(GET)にアクセスする場合は、次のクエリを実行できます。
http://myserver:port/resource/?status=1
request.query_params.get('status', None) => 1
POSTによって渡されたパラメーターにアクセスする場合は、次の方法でアクセスする必要があります。
request.data.get('role', None)
'get()'を使用して辞書(QueryDict)にアクセスすると、デフォルト値を設定できます。上記の場合、「ステータス」または「ロール」が通知されない場合、値はなしです。