2012-12-22 306 views
0

后,我使用GET方法,然后刷新数据得到重新提交 我使用的JavaScript表单验证的页面提交我的形式重复条目

我的看法是:

def show(request,post_id): 
    try: 
     p = post.objects.get(pk=post_id) 
     c = comment.objects.filter(blog_id=p) 
     if 'cbox' in request.GET: 
      c = comment(text=request.GET['cbox'],name=request.GET['cname'],blog=p) 
      c.save() 
     c_list = comment.objects.filter(blog_id=p) 
    except post.DoesNotExist: 
     raise Http404 
    return render_to_response('show.html',{'post':p,'c_list':c_list}) 

我的形式是:

<form name="comment" action="" method="get" onsubmit="return validateForm()"> 
    <input id="carea" type="text" placeholder="leave a comment" name="cbox" > 
    <input id="cb" type="submit" value="Post" /> 
    <input id="cn" type="text" placeholder="Name" name="cname"> 
</form> 

我想,当我刷新我的网页我的数据不能得到resubmited 谢谢

+2

http://en.wikipedia.org/wiki/Post/Redirect/Get –

+0

我使用这里 –

+1

在Django的教程GET方法4 https://docs.djangoproject.com/en/dev/intro/tutorial04 /,'使用method =“post”(而不是method =“get”)非常重要,因为提交这个表单的行为将会改变数据服务器端。每当你创建一个改变数据服务器端的表单时,使用method =“post”。这个提示并不是针对Django的;这只是一个很好的Web开发实践。' –

回答

1

如果你真的坚持使用GET来提交这实际上不是一个好方法。你应该使用服务器端的HttpResponseRedirect做一个请求重定向,它将从url中移除查询字符串。这样它就不会重新制作表格。

def show(request,post_id): 
    try: 
     p = post.objects.get(pk=post_id) 
     c = comment.objects.filter(blog_id=p) 
     if 'cbox' in request.GET: 
      c = comment(text=request.GET['cbox'],name=request.GET['cname'],blog=p) 
      c.save() 
      #Do a redirect here 
      return HttpResponseRedirect("URL of the page you would like to redirect") 
     c_list = comment.objects.filter(blog_id=p) 
    except post.DoesNotExist: 
     raise Http404 
    return render_to_response('show.html',{'post':p,'c_list':c_list})