在第一章节中我列出了所有文件,本章我将会介绍所有的文件。
具体的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);
#!/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)
程序目录,所有的实际程序都在这个目录中执行
程序初始化文件,生成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()
数据库映射,将我们前面建立的数据库映射到程序中来,这样程序就好操作数据库了。
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)
静态文件库,下面包括两个文件夹,CSS和JS,这两个文件夹里面的文件都是Bootstrap和jquery提供的,我们直接使用即可,不多做描述
├── static
│ ├── css
│ │ ├── bootstrap.min.css
│ │ └── signin.css
│ └── js
│ ├── bootstrap.min.js
│ └── jquery-3.4.1.min.js
html模板文件,也就是我们能从浏览器上看到的内容,这些文件的关键地方可能会根据内容不同被替换掉,从而使得每个用户看到的内容不一样。
动态文件,也就是python功能脚本所在的位置,本文我们只有一个文件login.py
数据库文件,这是一个sqlite3的本地数据库文件,具体怎么初始化这个数据库在根目录下的db_design.txt已经做了详细说明,关于如何连接和操作这个数据库,在model.py也做了说明