views.py
#提交评论def comment_post(request): try: if request.method == 'POST': comment_form = CommentForm(request.POST) print(comment_form) print(comment_form.is_valid()) if comment_form.is_vaild():#验证表单 #获取表单信息 comment = Comment.objects.create(username=comment_form.cleaned_data["author"], email=comment_form.cleaned_data["email"], url=comment_form.cleaned_data["url"], content=comment_form.cleaned_data["comment"], article_id=comment_form.cleaned_data["article"], user=request.user if request.user.is_authenticated() else None) print('comment:',comment) comment.save() else: return render(request,'failure.html',{'reason':comment_form.errors}) except Exception as e: logger.error(e) return redirect(request.META['HTTP_REFERER'])#HTTP_REFERE是header的一部分,浏览器向服务器发送请求的时候,告诉服务器我是从哪里过来的
urls.py
from django.conf.urls import urlfrom blog_project.views import *urlpatterns = [ url(r'^$',index,name='index'), url(r'^archive/$',archive,name='archive'), url(r'^article/$',article,name='article'), url(r'^comment/post/$',comment_post,name='comment_post'), url(r'^logout$',do_logout,name="logout"), url(r'^reg',do_reg,name='reg'), url(r'^login',do_login,name='login'), url(r'^category/$',category,name='category')]
forms.py
class CommentForm(forms.Form): ''' 评论表单 ''' author = forms.CharField(widget=forms.TextInput(attrs={"id":"author","class":"comment_input", "required":"required","size":"25","tabindex":"1"}), max_length=50,error_messages={"required":"username不能为空",}) email = forms.EmailField(widget=forms.TextInput(attrs={"id":"email","type":"email","class":"comment_input","required":"required","size":"25","tabindex":"2"}), max_length=50,error_messages={"required":"email不能为空",}) url = forms.URLField(widget=forms.TextInput(attrs={"id":"url","type":"url","class":"comment_input","size":"25","tabindex":"3"}), max_length=100,required=False) comment = forms.CharField(widget=forms.Textarea(attrs={"id":"comment","class":"message_input", "required":"required","cols":"25", "rows":"5","tabindex":"4"}), error_messages={"required":"评论不能为空",}) article = forms.CharField(widget=forms.HiddenInput())
article.html
<form action="{% url 'comment_post' %}" method="post"> {% csrf_token %} <p>{{comment_form.author}} <label for="author">Name<span style="color:red;">*</span></label> </p> <p>{{comment_form.email}} <label for="email">Email(Will NOT be published)<span style="color:red;">*</span></label> </p> <p>{{comment_form.url}} <label for="url">URL</label> </p> <p> {{comment_form.comment}} </p> <p> {{comment_form.article}} <input name="submit" type="submit" id="submit" tabindex="5" value="确认" class="button" /> </p> </form>
解决方案
一步一步排查,1表单是否提交数据到服务端,2把服务端的sql语句打印出来直接在数据库里面执行看看是否有错误。