使用Python Django框架创建一个小型博客

登录页面:

 

注册页面:

首页综合页面:

发布文章页面:

文章分类页面:

,

个人日志分类页面:

文章详情页:

点赞效果页面:

重复点赞:

新增评论与回复功能:

 评论功能比较容易实现,直接将评论与对应的文章ID绑定即可。回复功能实现起来稍微有点复杂,需要用到JavaScript方面的东西。目前我的实现方法是将评论人姓名放到评论列表中用Label中

的title来存放,如果点击回复就会触发JavaScript事件,显示回复框并且获取对应评论的评论人名称放入回复框中作为被回复人。对应HTML代码如下:

1                                 <div class="row">
2                                     <div class="col-md-8">
3                                             <p>{{comments.comment_content|safe}}</p>
4                                     </div>
5                                     <div class="col-md-4 pull-right" id="right2">
6                                             <p><label class="pull-right" title="{{comments.comment_user}}" onclick="showreplayform(this)"><a>回复</a></label>&nbsp&nbsp&nbsp&nbsp&nbsp</p>
7                                     </div>
8                                 </div>

对应的JavaScript代码如下:

 1 function showreplayform(id){
 2         var obj = document.getElementById("replay-form");
 3         obj.style.display = "block";
 4         window.location.href = "#replay-form";
 5         var comment_obj = document.getElementById("comment-form");
 6         comment_obj.style.display = "none";
 7         var comment_user = id.title
 8         document.getElementById("reply_input").value ="@"+comment_user+":";
 9         
10 }

实现效果如下图:

评论与回复过后会在对应的登录人来显示出新消息提醒列表:

这部分只要在Top.html导航中加上下拉列表用来显示新的未读取消息即可,代码如下:

 1               {% if comment_count_user %}
 2               <li class="dropdown">
 3                     <a href="#" class="btn btn-default dropdown-toggle info-number" data-toggle="dropdown">
 4                         <i class="fa fa-envelope-o"></i>
 5                         <span class="badge">{{comment_count_user}}</span>
 6                     </a>
 7                     <div class="dropdown-menu dropdown-menu-head pull-right">
 8                         <h5 class="title">您有{{comment_count_user}}条新评论 </h5>
 9                         {%for comments in comment_list_user%}
10                             <span class="list-group-item">
11                                     <a href="{%url 'comment_detail_page' comments.pk%}"><span class="thumb"><img src="../static/7c93baa4-056c-11e6-8212-000c2919e245.jpg" class="recommend_topic_img"></span>
12                                     <span class="name">{{comments.comment_user.name}} <span class="badge badge-success">{{comments.comment_time|date:"Y-m-d H:m:i"}}</span></span></a>
13                             </span>
14                         {%endfor%}
15                     </div>
16                 </li>
17               {%endif%}

最后是评论或是回复邮件提醒功能:

只需要在评论或者回复记录提交的同时发送邮件进行提醒即可。需要用到django.core.mail模块的send_mail和EmailMultiAlternatives功能。

所以首先要在views.py中导入相关函数以及setttings,方便获取setting.py文件中相关参数配置:

from django.core.mail import send_mail,EmailMultiAlternatives
from django.conf import settings

然后再评论提交时发送邮件提醒:

 1         if comment_content != "":
 2             subject = '您有一条来自JimBlog的评论'
 3             text_content = '#Comment:'+article.title+'\n\n'+user.name+":"+'\n'+comment_content+'\n'+\
 4             '---------------------------------------------------------------------------'+'\n'+\
 5             'URL:'+'http://localhost:8000'+article_url
 6             comment_content = markdown2.markdown(comment_content)
 7             comment_reminder = User.objects.get(name=article.auther.name)
 8             from_email = settings.DEFAULT_FROM_EMAIL
 9             msg = EmailMultiAlternatives(subject, text_content, from_email, [comment_reminder.email])
10             msg.send()
11             comment_obj = Comment.objects.create(comment_user = user,comment_content = comment_content,article=article,comment_status='N',comment_reminder=comment_reminder)

回复提交时发送邮件提醒:

1 if comtent_without_user !="":
2         from_email = settings.DEFAULT_FROM_EMAIL
3         subject = '您有一条来自JimBlog的回复'
4         text_content = '#Re:'+article.title+'\n\n'+'@'+user_reminder.name+'\n'+comtent_without_user+'\n'+\
5         '---------------------------------------------------------------------------'+'\n'+\
6         u'回复人:'+user_name+'\n'+'URL:'+'http://localhost:8000'+article_url
7         msg = EmailMultiAlternatives(subject, text_content, from_email, [user_reminder.email])
8         msg.send()
9         comment_obj = Comment.objects.create(comment_user = user_reply,comment_content = reply_content,article=article,comment_status='N',comment_reminder=user_reminder)

最终经过测试之后,邮件功能正常使用效果如下:

回复信息邮件提醒效果:

评论信息邮件提醒效果:

这样我们就将一个小型博客的功能基本上完成了,希望能对大家有所帮助。附上GitHub链接https://github.com/jimforit/JimBlog/tree/master/JimBlog

posted @ 2016-07-05 16:44  无奈的三文鱼  阅读(419)  评论(0编辑  收藏  举报