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),即原来的页面,但是评论框的文字已经没了,这样就能达到想要的效果