在Django的views.py中如何捕获所有的URL参数?

4

有很多讨论如何获得一个参数的问题,但是如何获取所有的参数并保留它们的顺序呢?

可以使用这种方式:request.GET.get('q', '') 来获取一个参数。

我需要捕获我的URL的POST请求,然后向URL添加一个参数,并将其发送回来以确认它的有效性和来源。 如果你好奇的话,这是为PayPal IPN而做的。

谢谢!


2
在 POST 或 GET 请求中,顺序并不重要。 - Daniel Roseman
是的,阅读PayPal IPN文档。 - User
4个回答

5

1
正如丹尼尔·罗斯曼(Daniel Roseman)所提到的,POST或GET请求参数之间的顺序不应该有影响; 将它们视为-对而不是列表。
如果要保持顺序,则可以将列表作为POST中的value传递,并在Django中获取它:
myData = request.POST.get("myQuery")

具体来说,POST请求不使用查询字符串*在此处查看)。POST使用请求正文,而GET使用查询字符串。请注意,从安全角度来看,这也意味着重要的客户信息不会明目张胆地显示在URL中--这在处理付款时尤其重要。
更新:*显然,POST可以使用查询字符串,但它们真的不应该这样做。 有关更多信息,请参见此SO帖子

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)

urllib2不是Python3的一部分。你知道如何在今天实现这个变化吗?我现在也遇到同样的困境... - Ryan Pergent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接