使用Python+Flask+Bootstrap实现一个简单的用户权限管理(RBAC)(Part3)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python+Flask+Bootstrap实现一个简单的用户权限管理(RBAC)(Part3),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5165字,纯文字阅读大概需要8分钟。
内容图文
代码结构和说明
在第一章节中我列出了所有文件,本章我将会介绍所有的文件。
根目录
- 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():
print("here")
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也做了说明
ppcorn2 发布了3 篇原创文章 · 获赞 0 · 访问量 42 私信 关注内容总结
以上是互联网集市为您收集整理的使用Python+Flask+Bootstrap实现一个简单的用户权限管理(RBAC)(Part3)全部内容,希望文章能够帮你解决使用Python+Flask+Bootstrap实现一个简单的用户权限管理(RBAC)(Part3)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。