如何制作一个同时执行G​​ET和POST的Django视图?

时间:2013-01-30 03:53:03

标签: django django-views

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

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

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

在表单向导的最后一步之后,我将用户重定向到“myWebsite.com/?objID=” 到现在为止还挺好。有用。但是我有两个新要求:

  1. 在此深入分析页面的顶部,如果我刚刚通过表单向导重定向到此页面,我希望它说“这是您新创建的对象”。
  2. 无论天气如何,我都是从表单向导或其他任何方式进入此深入分析页面,我希望URL保持与我上面解释的相同。
  3. 要求#2需要我使用POST以便不更改URL。但原始网址需要GET。所以我似乎需要在同一页面上进行GET和POST。我怎样才能做到这一点?我误会了什么吗?有没有更好的方法让我完成我想要做的事情?

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您无法发出既是POST又是GET请求的http请求。试图这样做很糟糕,会破坏互联网。

它反对RFC2616(http的w3c规范)。 http提供了一个方法,必须是'OPTIONS','GET','HEAD','POST','PUT','DELETE','TRACE','CONNECT'

之一

虽然这是开发人员经常忽略的原则,但GET旨在从服务器检索资源,具体而言,不会更改服务器上的资源或任何资源的状态。相反,POST请求专门用于更改资源的状态。所以GET用于Query,POST用于数据库更改。

答案 2 :(得分:1)

以下是我使用的内容:

# views.py
def api(request):
    params = request.POST.copy()
    params.update(request.GET)
    # now params has both get and post params merged

答案 3 :(得分:0)

request.method告诉您视图中的请求使用了什么http方法。所以你可以相应地编码。

e.g。

def my_view(request):

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

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

    ...