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

Posted

技术标签:

【中文标题】捕获 Django views.py 中的所有 URL 参数?【英文标题】:Capture all URL parameters in Django views.py? 【发布时间】:2014-09-05 22:25:37 【问题描述】:

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

有这种方式:request.GET.get('q', '') 获取1个参数。

我需要捕获对我的 URL 的 POST 请求,然后在 URL 中添加一个参数,然后将其发送回以确认其有效性和来源。如果您想知道,这适用于 PayPal IPN。

谢谢!

【问题讨论】:

顺序在 post 或 get 请求中并不重要。 是的,阅读 PayPal IPN 文档。 【参考方案1】:

正如@Daniel Roseman 所说,您可能不需要保留订单,在这种情况下,您可以使用request.GET dict

您也可以获取原始查询字符串:

request.META['QUERY_STRING']

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META

【讨论】:

【参考方案2】:

正如Daniel Roseman 提到的,POST 或 GET 请求参数之间的顺序不应该很重要;将它们视为key-value 对而不是列表。

如果你想保持秩序,那么也许在你的POST 中传递一个列表作为value 并在 Django 中获取它:

myData = request.POST.get("myQuery")

具体来说,POST 请求不使用查询字符串* (see here)。 POST 使用请求正文,而 GET 使用查询字符串。请注意,在安全方面,这也意味着重要的客户信息不会在 URL 中公然显示 - 这在处理付款时尤其非常重要。

更新:*显然,POST 可以使用查询字符串,但实际上不应该。 See this SO post for more.

【讨论】:

【参考方案3】:

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

newParameteres = 'cmd=_notify-validate&' + self.request.POST.urlencode()
req = urllib2.Request("http://www.paypal.com/cgi-bin/webscr", newParameteres)

【讨论】:

urllib2 不是 Python3 的一部分。您今天知道如何实现这一目标的任何改变?我现在也有同样的挣扎……

以上是关于捕获 Django views.py 中的所有 URL 参数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 django 模板无法识别我在 views.py 文件中设置的 url 参数?

如何在 Django 中重复调用 views.py 中的函数?

Django 页面无法呈现 - views.py url 路径中的错误

将一个变量(一个标志)从 urls.py 传递给 django 中的 views.py

[Django笔记] views.py 深入学习

Django之视图(views.py)