把模型创建到公共的models里面

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

manager中导入

执行数据库迁移

python manager.py db migrate
python manager.py db upgrade

form

class AddBoardForm(BaseForm):
""" 添加板块 """
name = StringField(validators=[InputRequired(message='请输入板块名称')]) class UpdateBoardForm(AddBoardForm):
""" 修改板块 """
board_id = IntegerField(validators=[InputRequired(message='请输入板块id')])

视图

@bp.route('/aboards/', methods=['POST'])
@login_required
@permission_required(CMSPersmission.BOARDER)
def aboards():
""" 添加板块 """
form = AddBoardForm(request.form)
if form.validate():
name = form.name.data
board = BoardModel(name=name)
db.session.add(board)
db.session.commit()
return restful.success()
else:
return restful.params_error(form.get_error()) @bp.route('/uboards/', methods=['POST'])
@login_required
@permission_required(CMSPersmission.BOARDER)
def uboards():
""" 更新板块 """
form = UpdateBoardForm(request.form)
if form.validate():
board_id = form.board_id.data
name = form.name.data
board = BoardModel.query.get(board_id)
if board:
board.name = name
db.session.commit()
return restful.success()
else:
return restful.params_error('没有这个板块')
else:
return restful.params_error(form.get_error()) @bp.route('/dboards/', methods=['POST'])
@login_required
@permission_required(CMSPersmission.BOARDER)
def dboards():
""" 删除板块 """
board_id = request.form.get('board_id')
if not board_id:
return restful.params_error('请输入板块id')
board = BoardModel.query.get(board_id)
if not board:
return restful.params_error('没有这个板块')
db.session.delete(board)
db.session.commit()
return restful.success()
@bp.route('/boards/')
@login_required
@permission_required(CMSPersmission.BOARDER)
def boards():
""" 板块管理页面 """
boards_model = BoardModel.query.all()
context = {'boards': boards_model}
return render_template('cms/cms_boards.html', **context)

添加板块js

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

html

{% extends 'cms/cms_base.html' %}
{% from "common/_macros.html" import static %} {% block title %}板块管理{% endblock %} {% block head %}
<script src="{{ static('cms/js/boards.js') }}"></script>
{% endblock %} {% block page_title %}
{{ self.title() }}
{% endblock %} {% block main_content %}
<div class="top-box">
<button class="btn btn-warning" style="float: right;" id="add-board-btn">添加板块</button>
</div>
<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>0</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>
{% endblock %}

创建一个板块

一百三十三:CMS系统之版块管理一的更多相关文章

  1. 一百三十四:CMS系统之版块管理二

    编辑 html,将数据渲染到tr上,方便js取值 js //编辑板块$(function () { $('.edit-board-btn').click(function (event) { var ...

  2. 一百零三:CMS系统之使用sweetalert提示框优化返回结果

    在base模板中引用 在修改密码的js中使用 $(function () { $('#submit').click(function (evnet) { evnet.preventDefault(); ...

  3. Java开发笔记(一百三十三)Swing的菜单

    传统的桌面程序基本是对某种类型的文件进行加工,例如Window自带的记事本用来读写文本文件,自带的画图程序用来查看和修改位图文件.为了方便用户切换各种操作,这些程序在窗口顶端放了一排菜单栏,单击菜单栏 ...

  4. 测开之路一百三十三:实现sql函数封装

    连接数据库的频率很高,所以把数据库操作封装起来 函数封装: def make_dicts(cursor, row): """ 将游标获取的Tuple根据数据库列表转换为d ...

  5. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

  6. 三十三、Java图形化界面设计——布局管理器之null布局(空布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...

  7. Java开源内容管理CMS系统J4CMS支持静态化直接ftp上传到你的空间了

    页面可直接编辑的cms系统j4cms能够直接支持使用ftp 输出 html到你的空间了 真正的静态化 这是静态化后的站点 http://www.j4cms.com/ 源代码上传至csdn了,能够下载源 ...

  8. 一百零九:CMS系统之前端根据不同权限渲染不同菜单

    给用户绑定为开发者 个人信息中渲染角色和权限 {% extends 'cms/cms_base.html' %} {% block title %} 个人信息{% endblock %} {% blo ...

  9. CMS系统简介(从简介到使用)

    CMS系统简介 1.简介 CMS是Content Management System的缩写,意为"内容管理系统". 在中国互联网的发展历程中,一直以来默默地为中国站长提供动力的CM ...

随机推荐

  1. 搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具

    清空yum源缓存,并查看yun源 [root@CentOS2 ~]# yum clean all Loaded plugins: fastestmirror, langpacks Cleaning r ...

  2. CSS浮动特性

    float:left/right左浮动有浮动 特点: ①浮动不占位:浮动元素不占位置 ②默认排列成一行,遇到边界自动换行 ③如果有文字(没有设置浮动的元素内容)会绕着浮动元素走 <!DOCTYP ...

  3. .NET Core 3全新来袭!DevExpress Winforms v19.2支持High DPI

    DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpr ...

  4. VCL界面开发必备装备!DevExpress VCL v19.1.7你值得拥有

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  5. 在stm32开发可以调用c标准库的排序和查找 qsort bsearch

    在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的 二分法查找,前提是已经排序好的数据.下面的代码, 如果数据为排序,则要进行排序后 ...

  6. SIGAI机器学习第七集 k近邻算法

    讲授K近邻思想,kNN的预测算法,距离函数,距离度量学习,kNN算法的实际应用. KNN是有监督机器学习算法,K-means是一个聚类算法,都依赖于距离函数.没有训练过程,只有预测过程. 大纲: k近 ...

  7. Flutter布局----弹性布局 (Flex)

    弹性布局(Flex) 弹性布局允许子组件按照一定比例来分配父容器空间.弹性布局的概念在其它UI系统中也都存在,如H5中的弹性盒子布局,Android中的FlexboxLayout等.Flutter中的 ...

  8. java获取web项目下文件夹的路径方法

    方法一: String realPath=request.getSession().getServletContext() .getRealPath("upload"); 方法二: ...

  9. word图片上传到服务器

    参考:http://blog.ncmem.com/wordpress/2019/08/07/word%e5%9b%be%e7%89%87%e4%b8%8a%e4%bc%a0%e5%88%b0%e6%9 ...

  10. MySQl的库操作、表操作和数据操作

    一.库操作 1.1库的增删改查 (1)系统数据库: performance_schema:用来收集数据库服务器的性能参数,记录处理查询时发生的各种事件.锁等现象 mysql:授权库,主要存储系统用户的 ...