Python之路,day22-BBS基础,,Python之路,d


Python之路,day22-BBS基础

多级评论

from  django.template import Libraryfrom django.utils.safestring import mark_saferegister = Library()@register.simple_tagdef truncate_upload_img(img_src):    print(dir(img_src))    print(img_src.name)    return img_src.name.lstrip("/uploads/")@register.simple_tagdef render_paginator_btn(articles,page):    current_page = articles.number    if abs(current_page - page) <= 5 :        ele = """<li ><a href="?page={page}">{page}</a></li>""".format(page=page)        return mark_safe(ele)    return ‘‘def build_comment_tree(comment_dic,obj):    """递归的去把每个评论放到合适的层级里面"""    for k,v in comment_dic.items():        if obj.p_node ==  k: #代表找他了它父节点,把自己加到k下面            print("[%s]找到了父节点[%s]" %(obj,k))            comment_dic[k][obj] = {}        else: #开始进行深度查询            print("没找到,进入下一层查找",obj)            build_comment_tree(comment_dic[k], obj)def build_comment_html(comment_dic,margin_arg):    """循环评论的字典, 拼接html"""    comment_eles = ‘‘    for k,v in comment_dic.items():        comment_eles += ‘‘‘<div style=‘border:1px dashed black;padding:10px;margin-left:{margin}px‘>{user} ---- {date} --- {comment}</div>‘‘‘            .format(user=k.user,                    date=k.date.strftime(‘%Y-%m-%d %H:%M:%S‘),                    comment=k.comment,                    margin=margin_arg)        if v:            comment_eles += build_comment_html(comment_dic[k],margin_arg+20)    return comment_eles@register.simple_tagdef load_comments(article_obj):    #1.先把数据库里所有的这篇文章的评论查出来,转成字典    #2.递归的循环这个字典,生成html评论元素    comment_dic = {    }    comment_objs = article_obj.comment_set.all().order_by(‘date‘) #列表    for obj in comment_objs:        if not obj.p_node:#判断obj有没有p_node,没有的话,那它自己就是顶级评论            comment_dic[obj] = {}        else: #有父亲节点            build_comment_tree(comment_dic,obj)    print(comment_dic)    comment_list = sorted(comment_dic.items(),key=lambda x:x[0].date)    print("comment objs:",comment_list)    comment_html = """"""    for comment_branch in comment_list:        margin_arg=0        branch_ele = """<div style=‘border:1px dashed black;padding:10px;margin-left:{margin}px‘>{user} ---- {date} --- {comment}</div>""".            format(user=comment_branch[0].user,                   date=comment_branch[0].date.strftime(‘%Y-%m-%d %H:%M:%S‘),                   comment=comment_branch[0].comment,                   margin=margin_arg)        comment_html += branch_ele        #开始构建它的子级评论的元素        comment_html +=  build_comment_html(comment_branch[1],margin_arg+20)    return mark_safe(comment_html)

  

webqq

from django.shortcuts import render,HttpResponsefrom django.views.decorators.csrf import csrf_exemptfrom webqq.msg_handler import MsgHandlerimport queue,json# Create your views here.MSG_QUEUES = {}def dashboard(request):    print("user--",request.user.userproifle)    return render(request,"webqq/dashboard.html")#@csrf_exemptdef msg_api(request):    msg_obj = MsgHandler(request, MSG_QUEUES)    if request.method == "POST":        msg_obj.msg_send()        return HttpResponse(json.dumps({"msg_send_status": 1}))    else:        msg_data = msg_obj.msg_recv()        return HttpResponse(json.dumps(msg_data))

  

  1 {% extends ‘index.html‘ %}  2   3 {% block extra-head-resources %}  4     <link href="/static/css/webqq_style.css" rel="stylesheet">  5   6 {% endblock %}  7   8   9 {% block container %} 10 <div  class="row" style="margin-top: 50px;height: 100%;"> 11 {% csrf_token %} 12     <div class="col-lg-2 contact_list"> 13  14         <ul class="nav nav-tabs" role="tablist"> 15           <li role="presentation"><a href="#contacts" aria-controls="contacts" role="tab" data-toggle="tab">c</a></li> 16           <li role="presentation"><a href="#groups" aria-controls="groups" role="tab" data-toggle="tab">g</a></li> 17  18         </ul> 19  20  21          <div class="tab-content"> 22             <div role="tabpanel" class="tab-pane active" id="contacts"> 23  24                 <div class="list-group"> 25                     {% for contact in request.user.userproifle.friends.all %} 26  27                         <a href="#" class="list-group-item" contact_id="{{ contact.id }}" contact_name="{{ contact.name }}" onclick="OpenSession(this)">{{ contact }} 28 {#                            <span class="badge">14</span>#} 29                         </a> 30  31                     {% endfor %} 32  33                 </div> 34  35             </div> 36             <div role="tabpanel" class="tab-pane" id="groups">groups</div> 37           </div> 38  39  40  41     </div> 42     <div class="col-lg-8  chat_panel"> 43  44         <div class="row chat_panel_header"> 45  46             <div class="hidden" style="color: green"> 47                 正在与<span contact_id="" id="chat_panel_header_text"></span>聊天 48             </div> 49         </div> 50  51         <div class="row chat_panel_body"> 52             body 53         </div> 54  55         <div class="row chat_panel_input_box"> 56  57             <textarea id="msg_input_box" class="msg_input_box"> 58  59  60  61             </textarea> 62  63         </div> 64  65     </div> 66  67  68 </div> 69  70  71 {% endblock %} 72  73  74 {% block bottom-js %} 75  76 <script> 77  78     $(document).ready(function () { 79  80          csrfmiddlewaretoken  = $("input[name=‘csrfmiddlewaretoken‘]").val(); 81  82  83          $("body").delegate("textarea", "keydown",function(e){ 84                 if(e.which == 13) {//Enter key down 85                     //send msg button clicked 86                     var msg_text = $("textarea").val(); 87                     if ($.trim(msg_text).length > 0){ 88                         //console.log(msg_text); 89                         SendMsg(msg_text); 90                     } 91                     //no wait the send_msg‘s call confirm msg 92                     AddSentMsgIntoBox(msg_text); 93                     $("textarea").val(‘‘); 94                 } 95          });//end body 96  97  98  99 100          /*setInterval(function () {101              LoadNewMsgs();102          },1000)*/103 104           LoadNewMsgs();105 106 107 108 109     });//end doc ready110 111 112     function LoadNewMsgs() {113 114 115 116         $.get("{% url ‘get_msg‘ %}",function(callback){117             console.log("get_msg callback:",callback);118             return LoadNewMsgs();119         });//end get120     }121 122     function SendMsg(msg) {123         console.log("going tosend msg" + msg);124 125 126 127         var msg_data = {128             ‘csrfmiddlewaretoken‘:csrfmiddlewaretoken,129             ‘from‘:"{{ request.user.userproifle.id }}",130             ‘to‘: $("#chat_panel_header_text").attr("contact_id"),131             ‘data‘:msg132         }133         $.post("{% url ‘msg_api‘ %}", msg_data ,function(callback){134 135             var callback = JSON.parse(callback); //json反序列化136             console.log("msg_send_status:",callback.msg_send_status);137             if ( callback.msg_send_status != 1){138                 alert("消息发送失败:"+ msg);139             }140         });//end post141 142 143     }144     function AddSentMsgIntoBox(msg_text) {145         var d = new Date();146         var msg_ele = "<div>   <div>{{ request.user.userproifle.name }}  "+ d.getHours() + ":" +d.getMinutes() + ":" + d.getSeconds() + "</div>";147         msg_ele += "<div>" + msg_text +"</div> </div>";148         $(".chat_panel_body").append(msg_ele);149 150 151         $(‘.chat_panel_body‘).animate({152             scrollTop: $(‘.chat_panel_body‘)[0].scrollHeight}, 500)153 154     }155     function  OpenSession(ele) {156         var contact_id = $(ele).attr("contact_id");157         var contact_name = $(ele).attr("contact_name");158         $(ele).addClass("active");159         $(ele).siblings().removeClass("active");160         $("#chat_panel_header_text").text(contact_name);161         $("#chat_panel_header_text").parent().removeClass("hidden");162         $("#chat_panel_header_text").attr("contact_id",contact_id);163 164     }165 166 167 168 169 170 171 </script>172 173 174 {% endblock %}

Python之路,day22-BBS基础

评论关闭