zoukankan      html  css  js  c++  java
  • Django中使用jQuery做评论的无刷新提交

    评论如果简单用表单来提交的话,每次做评论都得刷新页面。这样评论完又得重头翻才能找到自己的评论,效果非常不好,于是打算用jQuery来做评论的无刷新提交。实际上就是利用AJAX,将评论数据传到服务器,由服务器将处理后,将数据返回给浏览器,然后修改HTML代码,将评论显示出来。

    Django中使用jQuery的AJAX操作,还可以参考这里

    这是我的HTML代码

    1 <div>
    2     <span style="float:left;margin-top:10px;">
    3         <textarea name="content" rows="7" id="commentContent" style="550px;height:auto"  value=""></textarea>
    4     </span>
    5     <span style="clear:both;float:left;margin-top:10px;">
    6         <input type="submit" name="addComment" value="加上去" id="addComment"  style="font-size:12px;font-weight:bold;" title="加上去">
    7     </span>
    8 </div>

    这是我的javascript代码

    <script type="text/javascript" src="/static/js/jquery.min.js"></script>
    
    <script type="text/javascript"> 
    $(document).ready(function()
    {
      $("#addComment").click(function(event)
      {
            add_comment();
        });
        
        function add_comment()
        {
            $.post("add_comment/",   //请求的url是“当前页面/add_comment/"
            {
                content:$("#commentContent").val(),
            },
            function(data)
            {
              if(data.status=="success")
              {
                    $("#commentContent").val("");
                    $("#comment-list").append(data.html);//追加html片段
              }
              else
              {
                    alert(data.status);//提交失败,弹出提示。
              }
            },
            "json"
        );}
    });
    </script>

     

    在urls.py中添加对AJAX请求url的处理函数的映射

    1 urlpatterns += patterns('',
    2     (r'^photos/(?P<user_id>\d*)/(?P<photo_id>\d*)/add_comment/$', 'views.ajax_addComment'),
    3    #我这里是对照片进行评论
    4 )

    在views中添加处理函数

     1 @csrf_exempt #若没有csrf处理,服务器会返回403 forbidden错误
     2 def ajax_addComment(request, user_id, photo_id):
     3     if not request.is_ajax() or (request.method != 'POST'):
     4         return HttpResponse(json.dumps({"status":'error0'}))
     5          
     6     #只有登录用户,才可以操作
     7     if not request.user.is_authenticated():
     8         return HttpResponse(json.dumps({"status":'error1'}))
     9     
    10     try:
    11         content = (request.POST.get('content')).strip()
    12         if content != '':
    13             comment = Comment(photo_id=photo_id,author=request.user,content=content)
    14             comment.save()#保存评论数据到数据库中
    15 
    16             t = get_template('comment_item.html')
    17             html = t.render(Context({'comment':comment}))#对评论数据用comment_item.html这个模板进行渲染
    18   except: 
    19         return HttpResponse(json.dumps({'status': str(sys.exc_info()[0]) + str(sys.exc_info()[1])}))#返回异常信息,调试的时候可以用
    20     
    21     return HttpResponse(json.dumps({'status':'success','html':html}))

    上面使用了session和CSRF中间件,需要在settings.py中的MIDDLEWARE_CLASSES,添加下面的代码。

    1 MIDDLEWARE_CLASSES = (
    2     'django.contrib.sessions.middleware.SessionMiddleware',
    3     'django.middleware.csrf.CsrfViewMiddleware',
    4     'django.middleware.csrf.CsrfResponseMiddleware',
    5 )

     

    还是用了django中的user授权app,需要在settings.py中的INSTALLED_APPS,添加下面的代码。

    1 INSTALLED_APPS = (
    2     'django.contrib.auth',
    3     'django.contrib.sessions',
    4 )

     

    这是评论项的模板comment_item.html,里面的class是排版的需要,请自定义。

     1 <div class="comment-item" id="c_{{comment.id}}">
     2   <div class="fleft">
     3     <img title="{{comment.author.name}}" src="{{comment.author.avatar_src}}">
     4   </div>
     5 
     6   <div class="comment-text-wrapper">
     7     <div class="comment-head">
     8       <span>{{comment.date_posted}}</span>
     9       <span class="blue-link" style="margin-left:10px;">{{comment.author.name}}</span>
    10     </div>
    11     <div class="comment-text">
    12       <span>{{comment.content}}</span>
    13     </div>
    14   </div>
    15 </div>

     

  • 相关阅读:
    窗口和消息
    输出文字
    《windows程序设计》第一章,建议想学API的每天看一章
    hdu 1008为何不对?求大神指导!
    课程设计(物体类),图片可能没有加载出来,自己运行一下就行了
    二叉树前序、中序、后序遍历相互求法
    哈希表工作原理
    c++中关于static关键字的问题
    Halcon学习笔记之缺陷检测(二)
    Halcon学习笔记之缺陷检测(一)
  • 原文地址:https://www.cnblogs.com/restran/p/2469839.html
Copyright © 2011-2022 走看看