Django提交表单内容后,防止重复提交的方法

      写的个人博客中加了一个自己写的评论框,但是每次提交内容,刷新后,评论框中的文字还存在,而且一旦刷新就会再提交多一次,这个实在令人恼火。

搞了一整天之后,结合网上找的资料,试了一种办法终于解决了,下面记录一下:

views.py的函数是这样的

 1 def get_detail(request):
 2     try:
 3         blogs = Blog.objects.all()
 4         comments = Comment.objects.all()
 5     except Blog.DoesNotExist:
 6         raise Http404
 7 
9 8 if request.method == 'POST': 11 form = CommentForm(request.POST) 12 print "form:",form 13 if form.is_valid(): 14 print "form.clean():",form.clean() 15 cleaned_data = form.cleaned_data 16 print "type(cleaned_data):",type(cleaned_data) 17 print "cleaned_data['content']:",cleaned_data['content'] 18 19 Comment.objects.create(**cleaned_data) 20 #ctx = { 21 #'blogs':blogs, 22 #'comments':comments, 23 #'form': form 24 #} 25 return HttpResponseRedirect(reverse('blog_get_detail')) #这个函数式关键,跳转回原来的页面,'blog_get_detail'是urls.py中的一条路由 26 27 28 29 else: 30 form = CommentForm() 31 print "form in the GET:",form 32 33 ctx = { 34 'blogs':blogs, 35 'comments':comments, 36 'form': form 37 } 38 39 return render(request,'blog_detail.html',ctx)
urls.py文件的函数是这样的
1 urlpatterns = [
2     url(r'^admin/', admin.site.urls),
3     url(r'^$',blog_views.get_blogs,name="get_blogs"),
4     url(r'^blog/$',blog_views.get_detail,name='blog_get_detail'),    #与views.py中提到的HttpResponseRedirect()函数相对应
5     url(r'^photos/$',blog_views.get_photos,name='get_photos'),
6     url(r'^ueditor/', include(DjangoUeditor_urls)),
7 ]

所以,由上面的逻辑关系可以看出

(1)当提交表单内容后,函数会走到return HttpResponseRedirect(reverse('blog_get_detail')) 

(2)页面会刷新一遍,又重新跳转到def get_detail(request)函数,会走到return render(request,'blog_detail.html',ctx),即原来的页面,但是评论框的文字已经没了,这样就能达到想要的效果

posted @ 2017-01-11 19:54  伊斯科明  阅读(6245)  评论(2编辑  收藏  举报