如何在Django视图中获取所有GET请求值?
有很多问题在讨论怎么获取一个参数,但如果想获取所有参数,并且保持它们的顺序,该怎么做呢?
有一种方法是使用 request.GET.get('q', '')
来获取一个参数。
我需要捕捉到发送到我网址的POST请求,然后在网址中添加一个参数,再把它发回去,以确认这个参数的有效性和来源。如果你在想这是为了什么,那是为了PayPal的IPN。
谢谢!
4 个回答
0
举个例子,如果你访问下面这个网址:
https://example.com/?fruits=apple&meat=beef
那么,你就可以在 views.py
文件中获取到所有的参数,具体如下所示。*我的回答 解释了如何在 Django 中获取 GET
请求的值:
# "views.py"
from django.shortcuts import render
def index(request):
print(list(request.GET.items())) # [('fruits', 'apple'), ('meat', 'beef')]
print(list(request.GET.lists())) # [('fruits', ['apple']), ('meat', ['beef'])]
print(request.GET.dict()) # {'fruits': 'apple', 'meat': 'beef'}
print(dict(request.GET)) # {'fruits': ['apple'], 'meat': ['beef']}
print(request.META['QUERY_STRING']) # fruits=apple&meat=beef
print(request.META.get('QUERY_STRING')) # fruits=apple&meat=beef
return render(request, 'index.html')
0
是的,顺序在这里很重要。这就是我将要使用的内容:
newParameteres = 'cmd=_notify-validate&' + self.request.POST.urlencode()
req = urllib2.Request("http://www.paypal.com/cgi-bin/webscr", newParameteres)
1
正如Daniel Roseman提到的,POST和GET请求的参数顺序其实不重要;可以把它们想象成键
-值
对,而不是一个列表。
如果你想保持顺序,可以把一个列表作为值
放在你的POST
请求中,然后在Django中获取它:
myData = request.POST.get("myQuery")
具体来说,POST请求不使用查询字符串*(查看这里)。POST请求使用请求体,而GET请求使用查询字符串。需要注意的是,从安全的角度来看,这也意味着重要的客户端信息不会直接显示在URL中——这在处理支付时尤其重要。
更新:*显然,POST请求可以使用查询字符串,但其实不应该这样做。查看这个SO帖子了解更多。
5
正如@Daniel Roseman所说,你可能不需要保持顺序,这样的话你可以直接使用 request.GET
字典。
另外,你也可以获取原始的查询字符串:
request.META['QUERY_STRING']
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META