由于主项目Pear Admin Flask 的修改,配置部分可能有所变化,现在已经更新
这是一个基于 Python Flask 的学校数据管理插件,后台界面采用开源项目 Pear Admin Flask,并且以插件的形式接入 Pear Admin Flask 。
随着信息化的推进,学校数据管理的需求越来越高,如何有效地收集、分析和利用学校数据,提高教育质量和效率,是一个亟待解决的问题。为此,我开发了一个基于 Python Flask 的学校数据管理插件,旨在为学校提供一个简单、灵活、安全的数据管理平台。
我们学校经常和其他学校一起举办考试,考完后,如何对联合体的成绩进行分析和评价是一个重要的问题。对于老师,处理成绩,一直是一个头疼的问题,它通常耗时间耗经历。对于同学,如何查看历次考试的成绩、如何分析考试成绩,也是一个问题。为此我开始筹划“学校数据管理系统”的编写。
此项目使用 SQLite3 作为数据库存储数据,并采用 Jinja2 作为模板引擎渲染页面。此外,此项目还支持用户验证和权限控制,保证了数据的安全性。
我的设计理念是:简单而不简陋,灵活而不混乱。我希望通过我的插件,能够帮助学校实现高效、便捷、智能的数据管理 。
项目演示视频:Python Schoolmanager 学校数据管理-哔哩哔哩
项目基于我参与开发的 Pear Admin Flask,但是并不修改原项目,而是以插件的形式接入。当今时代,开源共建为热门话题,越来越多的企业和个人参与到开源项目中,分享自己的代码和经验,共同推动技术创新和社会进步。开源共建不仅能够提高软件质量和安全性,还能够激发创造力和协作精神,形成良好的生态环境,而此项目以插件的形式接入有利于项目的二次开发。
所以在搭建项目前,可以参考 Pear Admin Flask 配置搭建 的相关内容 。
采用 Python 版本: 3.8.6
在开发项目时,推荐使用 >= 3.8.6 的 Python 运行此项目
采用 IDE: Visual Studio Code
推荐使用 Visual Studio Code、PyCharm 等 IDE 开发
- 后台学生信息管理
- 后台成绩发布功能
- 后台成绩基本分析功能
- Excel 导入功能
- 前台学生成绩基本查询与成绩分析
- 学分管理功能
- 前台学生各次考试分析
- 时光邮局(学生给未来的自己寄信)
- 学生 PK 功能(学生与学生对比)
- 历次考试对比功能(考试与考试对比)
- Excel 导出功能
- 多学校管理功能
- 2023.3.21 更新功能:管理员可以直接查询学生历次成绩
- 2023.3.24 修复BUG:数据库文件不会自动创建
- 2023.3.24 修复BUG:考试发布页面无时间选择搜索报错
- 2023.3.24 修复BUG:用户发送非法 limit 与 page 参数时报错
- 2023.3.24 修复BUG:前台查询页面图标自动重设大小
- 2023.3.24 更新功能:创建新班级时可以自定义占位学生名
- 2023.3.25 更新功能:重写权限判断
- 2023.3.25 更新功能:加入“chatGPT对你说”功能,使用 AI 分析成绩并给出建议。
- 2023.4.24 修复BUG:修正 layui 获取单选项目奇特BUG。
- 2023.4.24 修复BUG:修正文件名包含空格的问题。
- 2023.4.27 修复BUG:chatGPT渲染阻塞个人照片BUG。
- 2023.5.2 修复BUG:赋分成绩渲染表格错误
- 2023.7.5 更新功能:更新项目与主项目同一
- 2023.7.7 更新功能:允许筛选导入
- 2023.7.8 更新功能:学生数据图表分析
安装 Python 过程不过多赘述,请到 Python 官网 下载。如果您不想要复杂的安装步骤,我们推荐使用虞颖健老师打包的 Python 懒人版。点击查看 --> 视频安装教程
Pear Admin Flask 的搭建步骤详细可以参考其官方文档,这里进行摘录(注意:此插件是基于 Pear Admin Flask master 分支的):
- Python >= 3.6
- MySQL >= 5.7.0 (非必要,可以使用 SQLite3 作为数据库)
在 Windows 下,对于 MySQL 的搭建,可以使用 PHPStudy 小皮面板一键搭建 MySQL 环境。为了方便导入 Pear Admin Flask 的原始数据库数据,可以使用 HeidiSQL 软件进行操作。
您可以使用 git 来克隆远程仓库:
# 进入项目主目录
cd Pear Admin Flask
# 使用 git 克隆远程仓库
git clone https://gitee.com/pear-admin/pear-admin-flask.git
# 切换分支
git checkout master # master, main or mini
或者直接前往 Pear Admin Flask 项目的Gitee 主页下载项目仓库。
我们推荐使用 Python 的虚拟环境来开发该项目,这样便于项目的迁移与二次开发。当然,您也可以选择使用原 Python 环境。
如果你想创建 Python 虚拟环境,你可以使用下面的命令行:
# 在当前目录的venv文件夹创建虚拟环境
python -m venv venv
# 激活虚拟环境
venv\Scripts\activate
如果在创建虚拟环境时报错 “ModuleNotFoundError” ,这说明您的 Python 版本小于 3.3 。
# 使用 pip 安装必要模块(对于 master 分支)
pip install -r requirement\dev.txt
# 安装 此项目依赖
pip install pandas
pip install requests
pip install openpyxl
或者您可以尝试:
# 使用 pip 安装必要模块(对于 master 分支)
python -m pip install -r requirement\requirement.txt
# 安装 此项目依赖
python -m pip install pandas
python -m pip install requests
pip install openpyxl
- 使用 SQLite3 作为数据库(不需要搭建 SQL 环境)
打开文件 applications/config.py
并修改如下行:
# mysql 数据库的配置信息
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{urlquote(MYSQL_PASSWORD)}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4"
# 改为
SQLALCHEMY_DATABASE_URI = "sqlite:///database.db"
# 如果需要,可以同时更改 APSCHEDULER 的参数(本项目用不到,如果对于 Pear Admin Flask 完整功能则是必须的)
SCHEDULER_JOBSTORES: dict = {
'default': SQLAlchemyJobStore(
url=f'mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}')
}
# 改为
SCHEDULER_JOBSTORES: dict = {
'default': SQLAlchemyJobStore(
url="sqlite:///database.db")
}
- 使用 mySQL 数据库
请按照配置修改变量:
# mysql 配置
MYSQL_USERNAME = "root"
MYSQL_PASSWORD = "123456"
MYSQL_HOST = "127.0.0.1"
MYSQL_PORT = 3306
MYSQL_DATABASE = "PearAdminFlask"
# 初始化数据库
flask db init
flask db migrate
flask db upgrade
flask admin init
依次执行后会显示:
加载系统必须用户数据
加载系统必须角色数据
加载系统必须部门数据
加载系统必须权限数据
基础数据存入
用户角色数据存入
角色权限数据存入
数据初始化完成,请使用python app.py命令运行
克隆此仓库的所有文件到 Pear Admin Flask 的 plugins/SchoolManager 文件夹下(需要手动创建 SchoolManager 文件夹)。
# 进入项目插件目录
cd plugins
# 使用 git 克隆远程仓库
git clone https://gitee.com/wojiaoyishang/python-schoolmanager-pear.git
并在 applications/config.py
文件中做如下修改:
# 插件配置
PLUGIN_ENABLE_FOLDERS = []
添加(或替换上)SchoolManager
,如:
# 插件配置
PLUGIN_ENABLE_FOLDERS = ["SchoolManager"]
注意:如果文件夹不是“SchoolManager”,则需要修改上述的名称为您创建的文件夹的名称。
如果你想在调试模式下运行此项目请使用下面的命令:
flask run
或者尝试
python -m flask run
当然,你也可以调用项目中的 app.py
运行此项目,如:
python app.py
在实际调试过程中,如果遇到了资源文件加载不完全的情况,请多刷新几次网页,具体原因未知,可能是 Flask 版本的问题。
如果你只是作为此项目的用户,你可以通过如下的方式更加稳定的运行项目。
安装 pywsgi :
pip install gevent
并修改 app.py 中的内容为:
from applications import create_app
from flask_migrate import Migrate
from applications.extensions import db
from gevent import pywsgi
app = create_app()
migrate = Migrate(app, db)
if __name__ == '__main__':
# app.run()
server = pywsgi.WSGIServer(('0.0.0.0', 7000), app, log=None)
server.serve_forever()
上述中的 7000
为运行端口, 0.0.0.0
为绑定的IP地址。
│ init_examAnalyse.py # 考试分析视图、API初始化
│ init_examPublish.py # 考试发布功能视图、API初始化
│ init_student.py # 学生管理视图、API初始化
│ init_utils.py # 文件上传功能、导入功能初始化
│ __init__.json # 插件介绍文件
│ __init__.py # 插件初始化文件
│
├─data
│ │ examData.db # 成绩数据库
│ │ studentData.db # 学生数据数据库
│ │ systemData.db # 系统设置数据库
│ │
│ └─photos # 保存学生证件照文件夹
├─module
│ examAnalyse.py # 考试分析内置函数(直接操作数据库)
│ examPublish.py # 考试发布内置函数(直接操作数据库)
│ setting.py # 系统设置内置函数(直接操作数据库)
│ student.py # 学生管理内置函数(直接操作数据库)
│
├─static # 前端资源文件夹
│
├─templates # 前段页面模板
│
├─upload # 文件上传保存文件夹
│
└─utils # 实用函数文件夹
│ __init__.py
│
├─engines # 导入引擎
│ excel.py
│
└─tools
目前不支持后台批量导入,若要批量导入请打开 data/photos 文件夹,找到对应的年段(比如2024届毕业,文件夹就是2024;如果没有请手动创建),然后拷贝所有学生证件照到此文件夹中。文件格式应该为:学生姓名.jpg
地址为: http(s)://你的域名(或者是IP地址)/schoolmanager