BBS论坛(十)
10.1.客户端权限验证功能完成
(1)cms/cms_profile
显示当前用户的角色和权限
- <tr>
- <td>角色:</td>
- <td>
- {% for role in user.roles %}
- {{ role.name }}
- {% if not loop.last %},{% endif %}
- {% endfor %}
- </td>
- </tr>
- <tr>
- <td>权限:</td>
- <td>
- {% for role in user.roles %}
- {{ role.desc }}
- {% if not loop.last %}/{% endif %}
- {% endfor %}
- </td>
- </tr>
(2)cms/hooks.py
- @bp.context_processor
- def cms_context_pocessor():
- return {'CMSPermission':CMSPermission}
(3)cms/cms_base.html
不同的角色,显示不同的内容
- {% set cms_user = g.cms_user %}
- {% if cms_user.has_permission(CMSPermission.POSTER) %}
- <li class="nav-group post-manage"><a href="#">帖子管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
- <li class="comments-manage"><a href="#">评论管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.BOARDER) %}
- <li class="board-manage"><a href="#">板块管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
- <li class="nav-group user-manage"><a href="#">前台用户管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
- <li class="nav-group cmsuser-manage"><a href="#">CMS用户管理</a></li>
- {% endif %}
- {% if cms_user.is_developer %}
- <li class="cmsrole-manage"><a href="#">CMS组管理</a></li>
- {% endif %}
(4)添加用户和角色
- #添加访问者
- python manage.py create_cms_user -u 我是访问者 -p 123456 -e 11111@qq.com
- python manage.py add_user_to_role -e 11111@qq.com -n 访问者
- #添加运营者
- python manage.py create_cms_user -u 我是运营者 -p 123456 -e 22222@qq.com
- python manage.py add_user_to_role -e 22222@qq.com -n 运营
- #添加管理员
- python manage.py create_cms_user -u 我是管理员 -p 123456 -e 33333@qq.com
- python manage.py add_user_to_role -e 33333@qq.com -n 管理员
不同的用户登录到后台cms显示不同的内容
开发者
访问者
10.2.服务端权限验证功能完成
(1)后台剩余的html页面
cms_posts.html
- {% extends 'cms/cms_base.html' %}
- {% block title %}
- 帖子管理
- {% endblock %}
- {% block head %}
- {% endblock %}
- {% block page_title %}
- {{ self.title() }}
- {% endblock %}
- {% block main_content %}
- 帖子管理页面
- {% endblock %}
其它几个一样
- cms_comments.html
- cms_boards.html
- cms_fusers.html
- cms_cusers.html
- cms_croles.html
(2)cms/decorators.py
添加一个权限验证的装饰器
- def permission_required(permission):
- def outter(func):
- @wraps(func)
- def inner(*args,**kwargs):
- user = g.cms_user
- if user.has_permission(permission):
- return func(*args,**kwargs)
- else:
- return redirect(url_for('cms.index'))
- return inner
- return outter
(3)cms/views.py
- @bp.route('/posts/')
- @login_required
- @permission_required(CMSPermission.POSTER)
- def posts():
- return render_template('cms/cms_posts.html')
- @bp.route('/comments/')
- @login_required
- @permission_required(CMSPermission.COMMENTER)
- def comments():
- return render_template('cms/cms_comments.html')
- @bp.route('/boards/')
- @login_required
- @permission_required(CMSPermission.BOARDER)
- def boards():
- return render_template('cms/cms_boards.html')
- @bp.route('/fusers/')
- @login_required
- @permission_required(CMSPermission.FRONTUSER)
- def fusers():
- return render_template('cms/cms_fusers.html')
- @bp.route('/cusers/')
- @login_required
- @permission_required(CMSPermission.CMSUSER)
- def cusers():
- return render_template('cms/cms_cusers.html')
- @bp.route('/croles/')
- @login_required
- @permission_required(CMSPermission.ALL_PERMISSION)
- def croles():
- return render_template('cms/cms_croles.html')
(4)cms/cms_base.html
修改url链接
- {% set cms_user = g.cms_user %}
- {% if cms_user.has_permission(CMSPermission.POSTER) %}
- <li class="nav-group post-manage"><a href="{{ url_for('cms.posts') }}">帖子管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
- <li class="comments-manage"><a href="{{ url_for('cms.comments') }}">评论管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.BOARDER) %}
- <li class="board-manage"><a href="{{ url_for('cms.boards') }}">板块管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
- <li class="nav-group user-manage"><a href="{{ url_for('cms.fusers') }}">前台用户管理</a></li>
- {% endif %}
- {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
- <li class="nav-group cmsuser-manage"><a href="{{ url_for('cms.cusers') }}">CMS用户管理</a></li>
- {% endif %}
- {% if cms_user.is_developer %}
- <li class="cmsrole-manage"><a href="{{ url_for('cms.croles') }}">CMS组管理</a></li>
- {% endif %}
BBS论坛(十)的更多相关文章
- Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...
- python 学习笔记二十 django项目bbs论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- python第一百三十天 ---简单的BBS论坛
简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...
- 开源BBS论坛软件推荐
七款开源BBS论坛软件推荐(1) 本文介绍了七个开源的BBS论坛软件(在英文界一般叫做Forum).可能国内的朋友们比较熟悉Discuz!和PHPwind,但其实我们的选择还是很多的,而且下面介绍的这 ...
- Python之路,Day17 - 分分钟做个BBS论坛
Python之路,Day17 - 分分钟做个BBS论坛 本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...
- Django小项目简单BBS论坛
开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...
- Python开发一个简单的BBS论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- bbs论坛浏览器兼容性问题
一直都是在chrome上进行调试,今天终于把bbs论坛这个项目搭建完了,进入IE.Firefox看了看 吓哭了!!! 火狐 Edge chrome 特别是加了<!DOCTYPE html> ...
- LNMP环境搭建BBS论坛及伪静态
我们在mysql备份 LNMP环境中的数据库迁移为独立的服务器的基础上搭建BBS论坛: [root@bqh-117 ~]# mysql -uroot -p123456 Welcome to the ...
- Django项目 BBS论坛
BBS论坛 一.项目表分析 二.自定义form组件 三.注册功能 四.BBS论坛 登录功能
随机推荐
- docker修改容器参数
docker update -m 500m --memory-swap - f669487f0804
- 腾讯AI开放平台的使用
一.腾讯AI开放平台 https://ai.qq.com/ 二.腾讯AI平台支持的功能 三.签名机制 1.计算步骤 用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤. 1.将< ...
- unity Camera第一人称移动,3中方法实现
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : ...
- setOnTouchListener在小米手机中不走ACTION_UP而是走ACTION_CANCEL
单点触控: MotionEvent.ACTION_DOWN:手指 初次接触到屏幕 时触发. MotionEvent.ACTION_MOVE:手指 在屏幕上滑动 时触发,会多次触发. MotionEve ...
- 四、自动化平台搭建-Django-如何做验证码
前提:安装包 pip install pillow==3.4.1 1.打开booktest/views.py,创建视图verify_code. from PIL import Image, Ima ...
- c语言第一次作业--分支 顺序结构
1.1思维导图 1.2.1本周学习体会以及代码量学习体会 1.2.2学习体会 因为在假期时只看了小部分的学习视频,也没有刷题量,导致了在开始就感觉到差同学的进程很多.刚开始觉得老师讲课很快,在恶补了很 ...
- 【转廖大神】package.json 包安装
现在我们遇到第一个问题:koa这个包怎么装,app.js才能正常导入它? 方法一:可以用npm命令直接安装koa.先打开命令提示符,务必把当前目录切换到hello-koa这个目录,然后执行命令: C: ...
- AGC001F - Wide Swap
Description 给你一个长度为$n$的排列,每次可以交换$|i-j|\geq K$并且$|a_i-a_j|=1$的数对,问你经过若干次变换后最小字典序的排列是啥 Solution 对$a$做一 ...
- java中的异常(二)
异常的分类 在使用上 Error不用管他虚拟机错误 Exception必须要用catch抓 RuntimeExcption可以处理也可以不用处理 说明 Error:称为错误,由java虚拟机生成并抛出 ...
- 解决audio控制播放音量
在写手机端项目时,可能会遇到使用audio播放音乐,那么怎样控制audio默认播放的音量呢?下面时解决办法 volume 属于是控制audio 播放音乐的音量,其范围0-1,1表示音量最大 getVi ...