BBS论坛(三十)
30.显示评论和添加评论功能完成
(1)apps/models.py
class CommentModel(db.Model):
__tablename__='comment'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
content=db.Column(db.Text,nullable=False)
create_time=db.Column(db.DateTime,default=datetime.now)
post_id=db.Column(db.Integer,db.ForeignKey('post.id'))
author_id = db.Column(db.String(50), db.ForeignKey('front_user.id'), nullable=False) post=db.relationship('PostModel',backref='comments')
author=db.relationship('FrontUser',backref='comments')
生成到数据库
python manage.py migrate python manage.py upgrade
(2)front/forms.py
class AddCommentForm(BaseForm):
content=StringField(validators=[InputRequired(message='请输入评论内容')])
post_id=IntegerField(validators=[InputRequired(message='请输入评论内容')])
(3)front/views.py
@bp.route('/acomment/',methods=['POST'])
@login_requried
def add_comment():
    form=AddCommentForm(request.form)
    if form.validate():
        content=form.content.data
        post_id=form.post_id.data
        post=PostModel.query.get(post_id)
        if post:
            comment=CommentModel(content=content)
            comment.post=post
            comment.author=g.front_user
            db.session.add(comment)
            db.session.commit()
            return restful.success()
        else:
            return restful.params_error(message='没有这个帖子')
    else:
        return restful.params_error(form.get_error())
(4)front/front_base.html
<span id="login-tag" data-is-login="1"></span>
(5)front/front_pdetail.html
{% extends 'front/front_base.html' %}
{% from 'common/_macros.html' import static %}
{% block title %}
    {{ post.title }}
{% endblock %}
{% block head %}
    <script src="{{ static('ueditor/ueditor.config.js') }}"></script>
    <script src="{{ static('ueditor/ueditor.all.min.js') }}"></script>
    <script src="{{ static('front/js/front_pdetail.js') }}"></script>
    <link rel="stylesheet" href="{{ static('front/css/front_pdetail.css') }}">
{% endblock %}
{% block body %}
    <div class="lg-container">
        <div class="post-container">
            <h2>{{ post.title }}</h2>
            <p class="post-info-group">
                <span>发表时间:{{ post.create_time }}</span>
                <span>作者:{{ post.author.username }}</span>
                <span>版块:{{ post.board.name }}</span>
                <span>阅读数:{{ post.read_count }}</span>
                <span>评论数:0</span>
            </p>
            <article class="post-content" id="post-content" data-id="{{ post.id }}">
                {{ post.content|safe }}
            </article>
        </div>
      <div class="comment-group">
        <h4>评论列表:</h4>
        <ul class="comment-list-group">
            {% for comment in post.comments %}
                <li>
                <div class="avatar-group">
                    <img src="{{ comment.author.avatar or static('common/images/logo.jpg') }}" alt="">
                </div>
                <div class="comment-content">
                    <p class="author-info">
                        <span>{{ comment.author.username }}</span>
                        <span>{{ comment.create_time }}</span>
                    </p>
                    <p class="comment-txt">
                        {{ comment.content|safe }}
                    </p>
                </div>
                </li>
            {% endfor %}
        </ul>
    </div>
    <div class="add-comment-group">
        <h3>添加评论</h3>
        <script id="editor" style="height:100px;" type="text/plain"></script>
        <div class="add_comment_btn">
            <button class="btn btn-primary" id='comment-btn'>发表评论</button>
        </div>
    </div>
    </div>
    <div class="sm-container"></div>
{% endblock %}
(6)front/css/front_pdetail.css
.comment-group{
    border:1px solid #e8e8e8;
    margin-top: 20px;
    padding: 10px;
}
.add-comment-group{
    border:1px solid #e8e8e8;
    margin-top: 20px;
}
.add_comment_btn{
    text-align: right;
    margin: 10px;
}
.add-comment-group h3{
    margin: 10px;
}
.comment-list-group li{
    overflow:hidden;
    border-bottom:1px solid #e8e8e8;
}
.avatar-group{
    float:left;
}
.avatar-group img{
    width: 50px;
    height: 50px;
    border-radius: 50%;
}
.comment-content{
    float: left;
    margin-left: 20px;
}
.comment-content .author-info{
    font-size: 12px;
    color:#8c8c8c;
}
.author-info span{
    margin-right:10px;
}
.comment-content .comment-txt{
    margin-top: 10px;
}
(7)front/front_pdetail.js
$(function(){
    var ue=UE.getEditor('editor',{
        'serverUrl':'/ueditor/upload/',
        "toolbars": [
            [
                'undo', //撤销
                'redo', //重做
                'bold', //加粗
                'italic', //斜体
                'blockquote', //引用
                'selectall', //全选
                'fontfamily', //字体
                'fontsize', //字号
                'simpleupload', //单图上传
                'emotion' //表情
            ]
        ]
    });
    window.ue=ue;
});
$(function(){
   $('#comment-btn').on('click',function(event){
       event.preventDefault();
       var login_tag=$('#login-tag').attr('data-is-login');
       if (! login_tag){
           window.location='/signin/'
       }else{
           var content=window.ue.getContent();
           var post_id=$('#post-content').attr('data-id');
           zlajax.post({
              'url':'/acomment/' ,
               'data':{
                  'content':content,
                   'post_id':post_id
               },
               'success':function(data){
                  if(data['code']==200){
                      zlalert.alertSuccessToast(msg='评论发表成功');
                      window.location.reload();
                  }else{
                        zlalert.alertInfo(data['message']);
                  }
               }
           });
       }
   }) ;
});

BBS论坛(三十)的更多相关文章
- BBS论坛(十八)
		
18.首页轮播图实现 (1)front/css/front_base.css .main-container{ width: 990px; margin: 0 auto; overflow: hidd ...
 - BBS论坛(十五)
		
15.1.登录界面完成 (1)front/signbase.html {% from 'common/_macros.html' import static %} <!DOCTYPE html& ...
 - BBS论坛(十九)
		
19.1.cms轮播图管理页面布局 (1)cms/cms_base.html <li class="nav-group banner-manage"><a hre ...
 - BBS论坛(十六)
		
16.登录功能完成 (1)front/forms.py class SigninForm(BaseForm): telephone = StringField(validators=[Regexp(r ...
 - BBS论坛(十四)
		
14.1注册完成跳到上一个页面 (1)front/form.py # front/forms.py __author__ = 'derek' from ..forms import BaseForm ...
 - BBS论坛(十二)
		
12.1.图形验证码生成 (1)utils/captcha/init.py import random import string # Image:一个画布 # ImageDraw:一个画笔 # Im ...
 - BBS论坛(十)
		
10.1.客户端权限验证功能完成 (1)cms/cms_profile 显示当前用户的角色和权限 <tr> <td>角色:</td> <td> {% f ...
 - python第一百三十天 ---简单的BBS论坛
		
简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...
 - Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
		
开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...
 - python 学习笔记二十 django项目bbs论坛
		
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
 
随机推荐
- docker容器时间与宿主机时间不一致问题
			
该问题是宿主机和容器时去不一致导致的. 把本机时区复制到宿主机即可: docker cp /etc/localtime a9c27487faf4:/etc/localtime 然后重启容器.
 - JSP(二):JSP九大内置对象、四个作用域对象
			
jsp的九大内置对象: 内置对象: jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象.我们在jsp页面中直接使用即可. 注意: ...
 - 《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day7
			
<团队作业第三.第四周>五小福团队作业--Scrum 冲刺阶段--Day7 一.项目燃尽图 二.项目进展 [20172301郭恺第七天的进展] 第七天完成的任务: 代码整合,界面调整为相对 ...
 - C++结构体与Delphi结构体相互传参,结构体中包含结构体的嵌套,数组指针
			
//结构体的声明 typedef struct Mwinddirectbaseline { char* p; int s; int i; }Mwinddirectbaseline; typedef s ...
 - 【java】-- 多线程之间实现通讯
			
1.多线程之间如何实现通讯 1.1.什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同. 画图演示 1.2.多线程之间通讯需求 需求:第一个线程写入(inpu ...
 - Unity Shader Graph 小功能实现(一)边缘发光
			
在Unity 2018.2 版本正式启用了高清渲染管线,shader可视化编程. 现在我们就尝尝鲜,来实现了个物体边缘发光的shader效果. 准备 点击Windos->Package Mang ...
 - BZOJ 4710
			
枚举几个同学分到了 对于每种特产求一个方案数(经典做法)乘起来 然后容斥 #include<bits/stdc++.h> using namespace std; #define rep( ...
 - MyBatis(七) 自定义映射结果ResultMap
			
(1)接口中对应的方法 public Emp getEmpById(Integer id); (2)Mapper文件 <resultMap type="com.eu.bean.Emp& ...
 - QT—QTextEdit控件显示日志
			
功能:利用QTextEdit开发一个日志显示窗口.没有太多操作,需要实现的是日志自动向上滚动,总体的日志量可以控制在x行(比如300行)以内:其他的应用功能我后面继续添加 #include <Q ...
 - 做个流量站-聚茶吧, 汇聚"茶"的地方
			
犹豫了好久,终于下定决心,做一回个人站长了,虽然没啥经验,但毕竟也是IT科班出身了,准备用一年的事件摸索一下内容站和SEO,看看能否积累点经验,赚点小钱. 推酷-靠爬虫起家的内容站 做内容站,站长们都 ...