1

我正在创建我的 Django 模型对象的实例:myObject.

我已经设置了一个 Django 表单向导以允许用户创建 myObjects 的新实例。

我已经设置了一个视图,允许用户使用这样的 GET 在 myObject 上“向下钻取”:“myWebsite.com/?objID=5”

在表单向导的最后一步之后,我将用户重定向到“myWebsite.com/?objID=" 到目前为止一切顺利。有用。但是我有两个新要求:

  1. 如果表单向导刚刚将我重定向到此页面,我希望它在此向下钻取页面的顶部显示“这是您新创建的对象”。
  2. 无论天气如何,我都是从表单向导或通过任何其他方式来到这个深入研究页面的,我希望 URL 保持与我上面解释的相同。

要求 #2 需要我使用 POST 以免更改 URL。但原始 URL 需要 GET。所以看来我需要在同一页面上执行 GET 和 POST。我怎样才能做到这一点?我是不是误会了什么?有没有更好的方法让我完成我想做的事情?

4

4 回答 4

3

您实际上不需要同时发出 GET 和 POST 请求。您缺少的是 POST 请求实际上可以具有 GET 参数以及 POST 参数。因此,正如 matino 在评论中指出的那样,这是完全有效的:

<form method="POST" action="myWebsite.com/?objID=5">

在您看来,request.GET将包含{'objID': 5}并且request.POST将包含在您的表单中提交的任何内容。

于 2013-01-30T09:57:14.843 回答
1

您不能发出既是 POST 又是 GET 请求的 http 请求。试图这样做是不好的,并且会破坏互联网。

它违反了RFC2616(http 的 w3c 规范)。http 提供了一个方法,该方法必须是“OPTIONS”、“GET”、“HEAD”、“POST”、“PUT”、“DELETE”、“TRACE”、“CONNECT”之一

尽管这是开发人员经常忽略的原则,但 GET 旨在从服务器检索资源,特别是在不更改服务器上该资源或任何资源的状态的情况下。相反,POST 请求专门用于更改资源的状态。所以 GET 用于查询,POST 用于数据库更改。

于 2013-01-30T07:52:47.527 回答
1

这是我使用的:

# views.py
def api(request):
    params = request.POST.copy()
    params.update(request.GET)
    # now params has both get and post params merged
于 2016-05-18T19:58:10.067 回答
0

request.method告诉您视图中的请求使用什么 http 方法。因此,您可以相应地对其进行编码。

例如

def my_view(request):

    if request.method == 'GET':
        #do processing for get

    else if request.method == 'POST':
        #do processing for POST

    ...
于 2013-01-30T04:49:52.730 回答