/Python-Schoolmanager-Pear

这是一个基于 Python Flask 的学校数据管理插件,后台界面采用开源项目 Pear Admin Flask,并且以插件的形式接入 Pear Admin Flask。随着信息化的推进,如何有效地收集、分析和利用学校数据,提高教育质量和效率,是一个亟待解决的问题。为此,我开发了一个基于 Python Flask 的学校数据管理插件,旨在为学校提供一个简单、灵活、安全的数据管理平台。

Primary LanguageHTMLMulan Permissive Software License, Version 2MulanPSL-2.0



Python Schoolmanager Pear

一 个 灵 活 的 学 校 数 据 管 理 项 目

由于主项目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 开发

快速预览

示例1 示例2
示例3 示例4
示例5 示例6
示例7 示例8

设计计划

  • 后台学生信息管理
  • 后台成绩发布功能
  • 后台成绩基本分析功能
  • 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 官网 下载。如果您不想要复杂的安装步骤,我们推荐使用虞颖健老师打包的 Python 懒人版。点击查看 --> 视频安装教程

搭建 Pear Admin Flask

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

导入 Pear Admin Flask 初始化数据库

配置数据库

  • 使用 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命令运行

安装学校数据管理插件(Python Schoolmanager Pear)

克隆此仓库的所有文件到 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 —— 调试模式下运行

如果你想在调试模式下运行此项目请使用下面的命令:

flask run

或者尝试

python -m flask run

当然,你也可以调用项目中的 app.py 运行此项目,如:

python app.py

在实际调试过程中,如果遇到了资源文件加载不完全的情况,请多刷新几次网页,具体原因未知,可能是 Flask 版本的问题。

pywsgi —— 发布项目

如果你只是作为此项目的用户,你可以通过如下的方式更加稳定的运行项目。

安装 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