如何在Django视图中获取所有GET请求值?

4 投票
4 回答
3139 浏览
提问于 2025-04-18 13:25

有很多问题在讨论怎么获取一个参数,但如果想获取所有参数,并且保持它们的顺序,该怎么做呢?

有一种方法是使用 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

paypal ipn

是的,顺序在这里很重要。这就是我将要使用的内容:

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

撰写回答