使用Python+Flask+Bootstrap实现一个简单的用户权限管理(RBAC)(Part3)
2020-06-06 05:38
411 查看
代码结构和说明
在第一章节中我列出了所有文件,本章我将会介绍所有的文件。
根目录
- db_design.txt
这是初始化数据库的sql脚本,在tool_portal目录下面有一个user.sqlite,这个文件就是由这个初始化脚本生成的。初始化脚本包括一系列的sql语句。如:
a) 建立用户表users,包括一个自动生成且唯一的userid,用户名username,用户的角色userrole,用户密码password
b) 建立角色表roles,包括一个自动生成且唯一的roleid,角色的名字rolename
c) 建立菜单表menu,包括一个自动生成且唯一的menuid,菜单名字menuname,菜单的父菜单parentmenu,菜单的顺序menuorder
d) 建立角色映射菜单rolemapping,包括包括一个自动生成且唯一的mappingid,角色roleid,和菜单menuid
具体的sql语句如下
CREATE TABLE users (userid INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL DEFAULT (null) ,userrole Integer,password text); CREATE TABLE roles (roleid INTEGER PRIMARY KEY AUTOINCREMENT, rolename TEXT NOT NULL DEFAULT (null)); CREATE TABLE menus (menuid INTEGER PRIMARY KEY AUTOINCREMENT, menuname TEXT NOT NULL DEFAULT (null) ,parentmenu integer, menuorder INTEGER); CREATE TABLE rolemappings (mappingid INTEGER PRIMARY KEY AUTOINCREMENT, roleid INTEGER, menuid INTEGER);
当表格建立完毕后,我们会增加一些默认值进入菜单中,包括
a) 在roles表中增加三个角色,admin, support, sales
b) 在users表中增加一个admin用户,密码是Password123!
c) 在menus表中增加两个父菜单supportmenu和salesmenu,同时给他们增加各两个子菜单supportsubmenu1/2 和salessubmenu1/2
具体sql语句如下
insert into roles(rolename) values('admin'); insert into roles(rolename) values('support'); insert into roles(rolename) values('sales'); insert into users(username,userrole,password) values ('admin',1,'63c9c7ffffcae785a032832c03cf0c79da5d5789b6a152aa49751b65'); insert into menus (menuname,menuorder) values ("supportmenu",1); insert into menus (menuname,menuorder) values ("salesmenu",2); insert into menus (menuname,parentmenu,menuorder) values ("supportsubmenu1",1,1); insert into menus (menuname,parentmenu,menuorder) values ("supportsubmenu2",1,2); insert into menus (menuname,parentmenu,menuorder) values ("salessubmenu1",2,1); insert into menus (menuname,parentmenu,menuorder) values ("salessubmenu2",2,2);
- run.py
主程序,通过运行这个程序来启动webserver。从源程序可以看到,我们从flask中引入了Flask和render_template,同时在tool_portal下引入了app,然后再从views中引入了login
最后程序在5000端口启动
#!/usr/bin/env python from flask import Flask,render_template from tool_portal import app import os app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True app.config['SECRET_KEY'] = os.urandom(24) from tool_portal.views import login app.register_blueprint(login.bp) app.add_url_rule("/", endpoint="login.login") @app.route('/', methods=['GET', 'POST']) def index(): return render_template('index.html') app.run(host='0.0.0.0',port=5000,debug=True)
tool_portal
程序目录,所有的实际程序都在这个目录中执行
init.py
程序初始化文件,生成app并给根目录调用,主要目的是为了让根目录可以支持多个类似应用,比如本目录叫tool_portal,还可以建立平行的目录too_portal_1/2/3等
#!/usr/bin/env python from flask import Flask from flask_sqlalchemy import SQLAlchemy def create_app(): app = Flask(__name__) return app app=create_app()
model.py
数据库映射,将我们前面建立的数据库映射到程序中来,这样程序就好操作数据库了。
from flask_sqlalchemy import SQLAlchemy from tool_portal import app import os USERDBPATH='sqlite:///users.sqlite' app.config['SQLALCHEMY_BINDS'] = {'userdb':USERDBPATH} dbusers=SQLAlchemy(app) class USERS(dbusers.Model): __bind_key__ = 'userdb' __tablename__ = 'users' userid = dbusers.Column(dbusers.Integer, primary_key=True) username = dbusers.Column(dbusers.Text, nullable=False) userrole = dbusers.Column(dbusers.Integer) password=dbusers.Column(dbusers.Text) class ROLES(dbusers.Model): __bind_key__ = 'userdb' __tablename__ = 'roles' roleid = dbusers.Column(dbusers.Integer, primary_key=True) rolename = dbusers.Column(dbusers.Text, nullable=False) class MENUS(dbusers.Model): __bind_key__ = 'userdb' __tablename__ = 'menus' menuid = dbusers.Column(dbusers.Integer, primary_key=True) menuname = dbusers.Column(dbusers.Text, nullable=False) parentmenu = dbusers.Column(dbusers.Integer, nullable=False) menuorder = dbusers.Column(dbusers.Integer, nullable=False) class ROLEMAPPINGS(dbusers.Model): __bind_key__ = 'userdb' __tablename__ = 'rolemappings' mappingid=dbusers.Column(dbusers.Integer,primary_key=True) roleid = dbusers.Column(dbusers.Integer,nullable=False) menuid = dbusers.Column(dbusers.Integer, nullable=False)
static
静态文件库,下面包括两个文件夹,CSS和JS,这两个文件夹里面的文件都是Bootstrap和jquery提供的,我们直接使用即可,不多做描述
├── static │ ├── css │ │ ├── bootstrap.min.css │ │ └── signin.css │ └── js │ ├── bootstrap.min.js │ └── jquery-3.4.1.min.js
templates
html模板文件,也就是我们能从浏览器上看到的内容,这些文件的关键地方可能会根据内容不同被替换掉,从而使得每个用户看到的内容不一样。
views
动态文件,也就是python功能脚本所在的位置,本文我们只有一个文件login.py
user.sqlite
数据库文件,这是一个sqlite3的本地数据库文件,具体怎么初始化这个数据库在根目录下的db_design.txt已经做了详细说明,关于如何连接和操作这个数据库,在model.py也做了说明
相关文章推荐
- 使用Python+Flask+Bootstrap实现一个简单的用户权限管理(RBAC)(Part4)
- 使用python做一个简单的名片管理系统-------字符串拼接方式实现
- 使用python实现一个简单的学生信息管理系统
- 使用python实现一个简单的学生信息管理系统
- 使用python实现一个简单的学生信息管理系统
- 使用python的Flask实现一个简单RESTful API服务器端
- 使用python多线程实现一个简单spider
- 使用SpringSecurity3实现RBAC权限管理
- python基础学习——利用Flask实现一个简单博客
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
- 使用 MEAN 进行全栈开发基础篇——2、弄一个简单的用户管理试试
- 一种简单方便的用户权限管理方法--使用菜单来管理用户权限(下)
- 怎么使用AOP做一个简单的权限管理
- 使用URL参数+Controls层实现网站用户权限管理
- 构建垂直搜索引擎 本课程带领大家实现一个简单的垂直搜索引擎网站,使用nodejs、python、elasticsearch实现的。
- 构建垂直搜索引擎 本课程带领大家实现一个简单的垂直搜索引擎网站,使用nodejs、python、elasticsearch实现的。
- 使用用户自定义控件实现asp.net的的权限管理
- tp5的RBAC插件及其使用很方便的管理用户登录及操作权限
- Neo4j: RBAC权限管理简单图模型(实现概述)
- 使用Python实现简单主机批量管理工具