仓库:MuZiCul/huatec(原创)· 语言:Python (Flask) · 定位:教务、人事、会务、资源四大业务域的高校管理平台
基于 Flask 的高校综合管理平台,通过 8 个蓝图模块覆盖教务、人事、行政、会务、资源等管理功能,是作者规模最大的 Flask 业务系统。
app.py)import pymysql
pymysql.install_as_MySQLdb() # 关键:让 SQLAlchemy 兼容 MySQL
app = Flask(__name__, template_folder='templates',
static_url_path='/', static_folder='')
app.config.from_object(config)
db.init_app(app)
migrate = Migrate(app, db)
# 注册 8 个业务蓝图
app.register_blueprint(administration_bp)
app.register_blueprint(affair_bp)
app.register_blueprint(home_bp)
app.register_blueprint(jiaowu_bp)
app.register_blueprint(login_bp)
app.register_blueprint(project_bp)
app.register_blueprint(resource_bp)
app.register_blueprint(system_bp)
before_request)@app.before_request
def before_request():
user_id = session.get('userid')
if user_id:
try:
user = UserModel.query.get(user_id)
if user:
g.user = user
except Exception as e:
print(e)
g.user = ''
url = request.path
lis01 = ['/login', '/register']
# 白名单:登录/注册页 + 静态资源
if url in lis01 or url.endswith('.ico') or url.endswith('.png') \
or url.endswith('.bmp') or url.endswith('.css'):
pass
elif not session.get('userid'):
return render_template('login/login.html') # 未登录统一跳登录页
@app.context_processor
def context_processor():
if hasattr(g, 'user'):
return {'user': g.user}
return {}
设计特点:
- 集中式权限拦截(而非每个路由加装饰器),一处控制全站访问
- 白名单机制放行登录页与静态资源(按后缀判断)
- context_processor 把 user 注入所有模板,前端可直接用
- 数据库查询异常时降级为 g.user = '',不阻断请求
| 蓝图 | 业务域 | 具体功能 |
|---|---|---|
login_bp |
认证 | 注册、登录/登出、账户注销 |
home_bp |
首页 | 系统首页 |
system_bp |
系统管理 | 用户管理、系统设置 |
project_bp |
项目管理 | 基础信息、专业管理、学生管理、人员管理、资产管理、培训管理 |
jiaowu_bp |
教务管理 | 成绩管理、考试管理、教学评价 |
administration_bp |
行政管理 | 入职办理、离职办理 |
affair_bp |
会务管理 | 会议管理、会务管理 |
resource_bp |
资源管理 | 学习资源、项目资源 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Integer | 主键 |
| username | String(50) | 用户名(唯一) |
| password | String(200) | 密码 |
| sex | Integer | 性别 |
| join_time | DateTime | 注册时间 |
| modify_time | DateTime | 修改时间 |
id, name, school, phone, email, zip, address, creat_time
| 类别 | 技术 |
|---|---|
| 框架 | Flask |
| ORM | SQLAlchemy |
| 数据库 | MySQL 5.7+(通过 pymysql 驱动) |
| 数据库迁移 | Flask-Migrate |
| 表单验证 | WTForms |
| 前端模板 | Jinja2 + Bootstrap |
这是我业务最复杂的一个 Flask 项目,覆盖 8 个业务域,含 RBAC 雏形、集中式登录拦截、数据库迁移。几个实用经验:
pymysql.install_as_MySQLdb():Python 3 + MySQLdb 兼容性问题的标准解法,实战必备.js,可能是个小遗漏从 Flask_framework(脚手架)到 huatec(多业务域系统)再到 RFID_Flask(配置数据库化),是我做 Flask 业务系统的几个阶段。