有很多问题讨论如何获取 1 个参数,但是如何获取所有参数并保留它们的顺序?
有这样的方法:
request.GET.get('q', '')
获取1个参数。
我需要捕获对我的 URL 的 POST 请求,然后向该 URL 添加一个参数,然后将其发送回来以确认其有效性和来源。如果您想知道的话,这是针对 PayPal IPN 的。
谢谢!
正如@Daniel Roseman所说,你可能不需要保留顺序,在这种情况下你可以使用
request.GET
dict
您也可以获取原始查询字符串:
request.META['QUERY_STRING']
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META
正如 Daniel Roseman 提到的,POST 或 GET 请求参数之间的顺序不应该很重要;将它们视为
key
-value
对而不是列表。
如果你想维持顺序,那么也许可以在
value
中传递一个列表作为 POST
并在 Django 中获取它:
myData = request.POST.get("myQuery")
具体来说,POST 请求不使用查询字符串*(参见此处)。 POST 使用请求正文,而 GET 使用查询字符串。请注意,从安全角度来看,这也意味着重要的客户信息不会公然显示在 URL 中——这在处理付款时尤其很重要。
更新:*显然,POST 可以使用查询字符串,但实际上不应该。 请参阅此帖子了解更多。
是的,顺序在这里很重要。这就是我要使用的:
newParameteres = 'cmd=_notify-validate&' + self.request.POST.urlencode()
req = urllib2.Request("http://www.paypal.com/cgi-bin/webscr", newParameteres)
例如,如果您访问以下网址:
https://example.com/?fruits=apple&meat=beef
然后就可以得到
views.py
中的所有参数了,如下图。 *我的回答解释更多:
# "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')