Flask实战第56天:板块管理

Posted sellsa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask实战第56天:板块管理相关的知识,希望对你有一定的参考价值。

cms布局

编辑 cms_boards.html

{% block main_content %}
    <div class="top-box">
        <button class="btn btn-warning" data-toggle="modal" data-target="#banner-dialog">添加新板块</button>
    </div>

    <table class="table table-bordered">
        <thead>
            <tr>
                <th>板块名称</th>
                <th>帖子数量</th>
                <th>创建时间</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
{% endblock %}

给 “添加轮播图“加上样式”

{% block head %}
    <style>
        .top-box button{
            float: right;
        }

        .top-box{
            overflow: hidden;
            background: #ecedf0;
            padding: 10px;
        }
    </style>
{% endblock %}

 技术分享图片

添加新板块后端

首先添加个表, 因为板块前后端都要用到,编辑apps.models.py

class BoardModel(db.Model):
    __tablename__ = board
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now)

同步表到数据库

>python manage.py db migrate
python manage.py db upgrade

添加个表单验证,编辑cms.forms.py

class AddBoardForm(BaseForm):
    name = StringField(validators=[InputRequired(message=请输入板块名称)])

编辑cms.views.py

...
from apps.models import BoardModel
from .forms import AddBoardForm

@bp.route(/aboard/, methods=[POST])
@login_required
@permission_required(CMSPersmission.BOARDER)
def aboard():
    add_form_board = AddBoardForm(request.form)
    if add_form_board.validate():
        name = add_form_board.name.data
        board = BoardModel(name=name)
        db.session.add(board)
        db.session.commit()
        return xjson.json_success(message=添加板块成功)
    else:
        return xjson.json_param_error(message=add_form_board.get_error())

添加板块的逻辑写好了,我们顺便把更新板块,删除板块一起写了

编辑cms.forms.py

class UpdateBoardForm(AddBoardForm):
    board_id = IntegerField(validators=[InputRequired(message=请输入板块id)])

编辑cms.views.py

from .forms import UpdateBoardForm

@bp.route(/uboard, methods=[POST])
@login_required
@permission_required(CMSPersmission.BOARDER)
def uboard():
    update_board_form = UpdateBoardForm(request.form)
    if update_board_form.validate():
        board_id = update_board_form.board_id.data
        name = update_board_form.name.data
        if board_id:
            board = BoardModel.query.get(board_id)
            board.name = name
            db.commit(board)
            return xjson.json_success(message=更新成功)
        else:
            return xjson.json_param_error(message=板块不存在)
    else:
        return xjson.json_param_error(message=update_board_form.get_error())


@bp.route(/dboard, methods=[POST])
@login_required
@permission_required(CMSPersmission.BOARDER)
def dboard():
    board_id = request.form.get(board_id)
    if not board_id:
        return xjson.json_param_error(message=请传入板块id)
    board = BoardModel.query.get(board_id)
    if not board:
        return xjson.json_param_error(message=没有这个板块)
    db.session.delete(board)
    db.session.commit()
    return xjson.json_success(message=删除板块成功)

 传递板块数据到前端页面

@bp.route(/boards/)
@login_required
@permission_required(CMSPersmission.BOARDER)
def boards():
    all_boards = BoardModel.query.all()
    context = {
        boards: all_boards
    }
    return render_template(cms/cms_boards.html, **context)

cms 前端js

给“添加新板块"按钮加上 id

<button class="btn btn-warning" data-toggle="modal" data-target="#banner-dialog" id="add-board-btn">添加新板块</button>

创建static/cms/js/boards.js

$(function () {
   $(‘#add-board-btn‘).click(function (event) {
       event.preventDefault();
       xtalert.alertOneInput({
           ‘text‘: ‘请输入板块名称‘,
           ‘placeholder‘: ‘板块名称‘,
           ‘confirmCallback‘: function (inputValue) {
               bbsajax.post({
                   ‘url‘: ‘/cms/aboard/‘,
                   ‘data‘: {
                       ‘name‘:inputValue
                   },
                   ‘success‘: function (data) {
                       if(data[‘code‘] ==200){
                           window.location.reload();
                       }else{
                           xtalert.alertInfo(data[‘message‘])
                       }
                   }
               });
           }
       });
   });
});

编辑cms_boards.html

引入boards.js

{% block head %}
    <script src="{{ url_for(‘static‘, filename=‘cms/js/boards.js‘)}}"></script>
    ...
{% endblock %}

动态展示数据

<table class="table table-bordered">
    <thead>
        <tr>
            <th>板块名称</th>
            <th>帖子数量</th>
            <th>创建时间</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        {% for board in boards %}
            <tr>
                <td>{{ board.name }}</td>
                <td>暂未实现</td>
                <td>{{ board.create_time }}</td>
                <td>
                    <button class="btn btn-default btn-xs edit-board-btn">编辑</button>
                    <button class="btn btn-danger btn-xs delete-board-btn">删除</button>
                </td>
            </tr>
        {% endfor %}
    </tbody>
</table>

 技术分享图片

技术分享图片

 

以上是关于Flask实战第56天:板块管理的主要内容,如果未能解决你的问题,请参考以下文章

11Flask实战第11天:视图使用装饰器

Flask实战第41天:发送短信验证码

12Flask实战第12天:子域名

31Flask实战第31天:cms后台修改密码

36Flask实战第36天:客户端权限验证

Flask实战第47天:首页导航条首先和代码抽离