在django中实现要有提交表单的相关操作,但是这里又不想刷新页面的话就需要用到ajax来实现。ajax前端用jQuery的框架很简单,后端在django中包括表单的验证都有很好的封装。
以提交一篇日志的评论为例,前端的代码很简单:
$(".comment-form a").bind("click",function(){
$('.loading').fadeIn();
var comment_form = {
blogid : ...,
name : ...,
email : ...,
website : ...,
message : ...
}
$.ajax({
url : "/blog/setComment/",
data : comment_form,
type : "post",
somethinguccess : function(data){
data = JSON.parse(data);
if(data.code == 0){
//do something to handle error log
}
else{
//do something to handle success
}
$('.loading').fadeOut();
}
})
});
在django的view中首先要引入
import datetime
from django import forms
from django.utils import simplejson as json
forms用作表单的验证处理,simplejson用作对返回数据的json格式化
这里不用js经行验证是因为用户有可能在浏览器端禁用js或者用大量的恶意数据来进行攻击,所以要在服务器端来进行表单的验证。这里建立一个form表单验证的表单类
class CommentForm(forms.Form):
blogid = forms.IntegerField()
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
website = forms.URLField(required=False)
message = forms.CharField(required=True)
这里的其他表单验证属性还请自行google
然后再定义post的setComment
def setComment(request):
if request.is_ajax():
form = CommentForm(request.POST)
if form.is_valid():
p = Comment(blogid=request.POST.get('blogid'),name=request.POST.get('name'),email=request.POST.get('email'),website=request.POST.get('website'),content=request.POST.get('message'),date=datetime.datetime.now())
p.save()
return HttpResponse(json.dumps({"code":1,"message":{"name":request.POST.get('name'),"message":request.POST.get('message')}}))
else:
return HttpResponse(json.dumps({"code":0,"message":[{"name":"name","error":form['name'].errors},{"name":"email","error":form['email'].errors},{"name":"website","error":form['website'].errors},{"name":"message","error":form['message'].errors}]}))
首先判断request的类型是否为ajax,然后定义表单验证的类并经行验证,验证成功保存到数据库并返回成功的数据,验证错误返回错误信息