23.添加板块

(1)apps/models

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

(2)manage.py

  1. from apps.models import BoardModel

生成数据库表

  1. python manage.py db migrate
  2.  
  3. python manage.py db upgrade

(3)cms/forms.py

  1. class AddBoardsForm(BaseForm):
  2. name=StringField(validators=[InputRequired(message='请输入版块名称'),Length(2,15,message='长度应在2-15个字符之间')])
  3.  
  4. class UpdateBoardForm(AddBoardsForm):
  5. board_id=IntegerField(validators=[InputRequired(message='请输入版块名称')])

(4)cms/views.py

  1. @bp.route('/boards/')
  2. @login_required
  3. @permission_required(CMSPermission.BOARDER)
  4. def boards():
  5. board_models=BoardModel.query.all()
  6. context={
  7. 'boards':board_models
  8. }
  9. return render_template('cms/cms_boards.html',**context)
  10.  
  11. @bp.route('/aboards/',methods=['POST'])
  12. @login_required
  13. @permission_required(CMSPermission.BOARDER)
  14. def aboards():
  15. form=AddBoardsForm(request.form)
  16. if form.validate():
  17. name=form.name.data
  18. board=BoardModel(name=name)
  19. db.session.add(board)
  20. db.session.commit()
  21. return restful.success()
  22. else:
  23. return restful.params_error(message=form.get_error())
  24.  
  25. @bp.route('/uboards/',methods=['POST'])
  26. @login_required
  27. @permission_required(CMSPermission.BOARDER)
  28. def uboards():
  29. form=UpdateBoardForm(request.form)
  30. if form.validate():
  31. board_id=form.board_id.data
  32. name=form.name.data
  33. board=BoardModel.query.get(board_id)
  34. if board:
  35. board.name=name
  36. db.session.commit()
  37. return restful.success()
  38. else:
  39. return restful.params_error(message='没有这个版块')
  40. else:
  41. return restful.params_error(message=form.get_error())
  42.  
  43. @bp.route('/dboards/',methods=['POST'])
  44. @login_required
  45. @permission_required(CMSPermission.BOARDER)
  46. def dboards():
  47. board_id=request.form.get('board_id')
  48. if not board_id:
  49. return restful.params_error(message='请传入版块ID')
  50. board=BoardModel.query.get(board_id)
  51. if board:
  52. db.session.delete(board)
  53. db.session.commit()
  54. return restful.success()
  55. else:
  56. return restful.params_error(message='没有这个版块')

(5)cms/js/boards.js

  1. $(function () {
  2. $('#add_board_btn').on('click', function () {
  3. event.preventDefault();
  4. zlalert.alertOneInput({
  5. 'title':'添加板块',
  6. 'text': '请输入板块名称',
  7. 'placeholder': '版块名称',
  8. 'confirmCallback': function (inputValue) {
  9. zlajax.post({
  10. 'url': '/cms/aboards/',
  11. 'data': {
  12. 'name': inputValue
  13. },
  14. 'success': function (data) {
  15. if (data['code'] == 200) {
  16. window.location.reload();
  17. } else {
  18. zlalert.alertInfo(data['message']);
  19. }
  20. }
  21. });
  22.  
  23. }
  24. })
  25. });
  26.  
  27. });

(6)cms/cms_boards.html

  1. {% extends 'cms/cms_base.html' %}
  2. {% from'common/_macros.html' import static %}
  3. {% block title %}
  4. 板块管理
  5. {% endblock %}
  6.  
  7. {% block head %}
  8. <script src="{{ static('cms/js/boards.js') }}"></script>
  9. {% endblock %}
  10.  
  11. {% block page_title %}
  12. {{ self.title() }}
  13. {% endblock %}
  14.  
  15. {% block main_content %}
  16. <div class="top-box">
  17. <button class="btn btn-warning" id="add_board_btn" style="float: right">添加新版块</button>
  18. </div>
  19.  
  20. <table class="table table-bordered">
  21. <thead>
  22. <tr>
  23. <th>版块名称</th>
  24. <th>帖子数量</th>
  25. <th>创建时间</th>
  26. <th>操作</th>
  27. </tr>
  28. </thead>
  29.  
  30. <tbody>
  31. {% for board in boards %}
  32. <tr data-name="{{ board.name }}" data-id="{{ board.id }}">
  33. <td>{{ board.name }}</td>
  34. <td>0</td>
  35. <td>{{ board.create_time }}</td>
  36. <td>
  37. <button class="btn btn-default edit-board-btn">编辑</button>
  38. <button class="btn btn-danger delete-board-btn">删除</button>
  39. </td>
  40. </tr>
  41.  
  42. {% endfor %}
  43. </tbody>
  44. </table>
  45.  
  46. {% endblock %}

BBS论坛(二十三)的更多相关文章

  1. BBS论坛(十三)

    13.1点击更换图形验证码 (1)front/signup.html <div class="form-group"> <div class="inpu ...

  2. python 学习笔记二十 django项目bbs论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...

  3. 开源BBS论坛软件推荐

    七款开源BBS论坛软件推荐(1) 本文介绍了七个开源的BBS论坛软件(在英文界一般叫做Forum).可能国内的朋友们比较熟悉Discuz!和PHPwind,但其实我们的选择还是很多的,而且下面介绍的这 ...

  4. Django项目 BBS论坛

    BBS论坛 一.项目表分析 二.自定义form组件 三.注册功能 四.BBS论坛 登录功能

  5. Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统

    Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...

  6. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  7. Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点

    开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...

  8. Bootstrap <基础二十三>页面标题(Page Header)

    页面标题(Page Header)是个不错的功能,它会在网页标题四周添加适当的间距.当一个网页中有多个标题且每个标题之间需要添加一定的间距时,页面标题这个功能就显得特别有用.如需使用页面标题(Page ...

  9. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】

    <Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  10. Python之路,Day17 - 分分钟做个BBS论坛

    Python之路,Day17 - 分分钟做个BBS论坛   本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...

随机推荐

  1. 手把手带你入门kubernetes部署

    实验环境准备 k8s-master   192.168.2.156 k8s-node节点   192.168.2.161 Ps:两台保证时间同步,firewalld防火墙关闭,selinxu关闭,系统 ...

  2. vue基础4-数据绑定

    1.v-bind 只能实现数据额单向绑定,从M到V,无法实现数据的双向绑定 改变页面输入框的值,打印数据并未改变. 2.v-model 可以实现数据的双向绑定,从M到V.V到M.  注意:v-mode ...

  3. bzoj1124_枪战_基环树

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1124 https://www.luogu.org/problemnew/show/P34 ...

  4. 【转】Zookeeper 安装和配置

    转自:http://coolxing.iteye.com/blog/1871009 Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进行介绍. 单机 ...

  5. Google FireBase - fcm 推送 (Cloud Messaging)

    要将 Firebase 添加到您的应用,您需要有一个 Firebase 项目以及适用于您的应用的 Firebase 配置文件. 如果您还没有 Firebase 项目,请在 Firebase 控制台中创 ...

  6. 七牛云音频转码准备工作之如何创建音视频处理私有队列pipeline

    如何创建音视频处理私有队列 最近更新时间:2017-08-28 15:54:45 在七牛进行音视频处理,推荐使用私有队列(pipeline). 创建私有队列方法如下: 第一步 登录七牛开发者平台 ht ...

  7. sketch2code 有的叫screenshot to code什么的

    先mark一下项目,回头再深究 https://github.com/mzbac/sketch2code https://www.floydhub.com/emilwallner/datasets/h ...

  8. HTML入门10

    目前,掌握了图像,视频和音频的嵌入,下面来谈iframe和embed.object嵌入网页, 嵌入简史,刚开始流行用嵌入框架然后不同部分显示i不同内容,可以解决下载速度慢时的问题: 慢慢的插件技术流行 ...

  9. Linux系统如何添加IP别名

    IP别名可以在一块物理网卡上绑定多个IP地址,这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机,简单来说,IP别名就是一张物理网卡上配置多个IP,实现类似子接口之类的功能. 那么IP ...

  10. Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...