我正在创建我的Django模型对象的实例:myObject。
我已经设置了一个Django表单向导,允许用户创建myObjects的新实例。
我已经设置了一个视图,允许用户使用这样的GET在myObject上“向下钻取”:“myWebsite.com/?objID=5”
在表单向导的最后一步之后,我将用户重定向到“myWebsite.com/?objID=” 到现在为止还挺好。有用。但是我有两个新要求:
要求#2需要我使用POST以便不更改URL。但原始网址需要GET。所以我似乎需要在同一页面上进行GET和POST。我怎样才能做到这一点?我误会了什么吗?有没有更好的方法让我完成我想要做的事情?
答案 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
...