首页 > OOP语言 > AJAX > 正文

python2.7+django1.2+sae博客评论的ajax异步提交
2014-01-10 16:43:29   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

在开发博客系统或者是电商系统,总之,凡是带有回复、评论、回帖之类针对一个内容进行回复的功能的时候,现在几乎全部都是采用ajax异步提交,并且同步在正确的位置显示提交结果,而不是在提交之后重新刷新整个页面来显示提交之后的内容。

ajax由于google的使用,被广为推广。它在客户端使用javascript语言编写,使用XMLHttpRequest对象,实现和服务的数据交互,详细信息参看:AJAX - XMLHttpRequest 对象。

ajax提交或者获取数据,常用数据形式包括:

普通文本,自己定义规则,自己解析,无成熟类库,需要自己编写。

xml文本,使用xml解析器解析,有成熟类库。

json文本,流行的数据形式,以体积小、灵活而著称,有成熟类库。

ajax有几个好处:

防止页面刷新,因为提交的只是一部分内容,页面大部分内容没有发生改变,如果还是刷新进而重新获取全部的话,对于服务器和客户端都是一种负担。而且页面刷新还会产生其他问题,诸如重复提交之类的。

减轻服务器负担,可以为更多人提供服务。

也有一些缺点:

给编程和调试带来一些小麻烦,不够使用习惯了,还是有一些方法和窍门的。

由于是ajax,所以页面地址没有变化,所以如果想分享地址的话,难以实现。需要做额外的工作,例如把地址打印出来,让用户复制分享。

用户不容易知道自己的提交正在进行,因为页面没有刷新,用户可能会重新点击提交按钮。这也可以解决,提交过程给出明显提示,然后灰掉提交按钮,或者做一些防止重复提交的工作。

今天的例子是博客评论的异步提交,环境是python2.7+django1.2+SAE。

下面是后台的处理代码,view中的代码

@csrf_exempt              
def comment_new(request,blog_id): 
    blog=get_object_or_404(Blog,pk=blog_id) 
         
    #str(request.raw_post_data) 
    if request.method=="POST" and request.is_ajax(): 
        title=request.POST['comment_title'] 
        name=request.POST['comment_author_name'] 
        email=request.POST['comment_author_email'] 
        url=request.POST['comment_author_url'] 
        content=request.POST['comment_content'] 
        comment=Comment(title=title,author_name=name,author_email=email,author_url=url,content=content); 
        comment.blog=blog 
        comment=comment.save() 
     
        _dict={} 
        _dict["title"]=title 
        _dict["author_name"]=name 
        _dict["author_email"]=email 
        _dict["author_url"]=url 
        _dict["content"]=content 
          _dict["created_at"]=unicode(datetime.datetime.now()) 
         
         
    return HttpResponse(simplejson.JSONEncoder().encode(str(_dict))) 
     
     
def obj2dict(obj): 
    """ 
    summary: 
        将object转换成dict类型     
    """
    memberlist = [m for m in dir(obj)] 
    _dict = {} 
    for m in memberlist: 
        if m[0] != "_" and not callable(m): 
            _dict[m] = getattr(obj,m) 
     
    return _dict

相关热词搜索:

上一篇:跨域访问代理API-yahooapis
下一篇:学习使用AJAX之前必须了解的知识

分享到: 收藏