# Python Schoolmanager Pear **Repository Path**: cmpyth/python-schoolmanager-pear ## Basic Information - **Project Name**: Python Schoolmanager Pear - **Description**: 这是一个基于 Python Flask 的学校数据管理插件,后台界面采用开源项目 Pear Admin Flask,并且以插件的形式接入 Pear Admin Flask。随着信息化的推进,如何有效地收集、分析和利用学校数据,提高教育质量和效率,是一个亟待解决的问题。为此,我开发了一个基于 Python Flask 的学校数据管理插件,旨在为学校提供一个简单、灵活、安全的数据管理平台。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://lovepikachu.top - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2023-09-06 - **Last Updated**: 2023-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README


Python Schoolmanager Pear

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

> **由于主项目Pear Admin Flask 的修改,配置部分可能有所变化,现在已经更新** ## 项目介绍与设计理念 这是一个基于 Python Flask 的学校数据管理插件,后台界面采用开源项目 Pear Admin Flask,并且以插件的形式接入 Pear Admin Flask。 随着信息化的推进,学校数据管理的需求越来越高,如何有效地收集、分析和利用学校数据,提高教育质量和效率,是一个亟待解决的问题。为此,我开发了一个基于 Python Flask 的学校数据管理插件,旨在为学校提供一个简单、灵活、安全的数据管理平台。 我们学校经常和其他学校一起举办考试,考完后,如何对联合体的成绩进行分析和评价是一个重要的问题。对于老师,处理成绩,一直是一个头疼的问题,它通常耗时间耗经历。对于同学,如何查看历次考试的成绩、如何分析考试成绩,也是一个问题。为此我开始筹划“学校数据管理系统”的编写。 此项目使用 SQLite3 作为数据库存储数据,并采用 Jinja2 作为模板引擎渲染页面。此外,此项目还支持用户验证和权限控制,保证了数据的安全性。 我的设计理念是:简单而不简陋,灵活而不混乱。我希望通过我的插件,能够帮助学校实现高效、便捷、智能的数据管理。 项目演示:[Python Schoolmanager 学校数据管理-哔哩哔哩](https://b23.tv/kERTlNb) ## 项目说明 项目基于我参与开发的 [Pear Admin Flask](https://gitee.com/pear-admin/pear-admin-flask),但是并**不修改原项目**,而是以插件的形式接入。当今时代,开源共建为热门话题,越来越多的企业和个人参与到开源项目中,分享自己的代码和经验,共同推动技术创新和社会进步。开源共建不仅能够提高软件质量和安全性,还能够激发创造力和协作精神,形成良好的生态环境,而此项目以插件的形式接入有利于项目的二次开发。 所以在搭建项目前,可以参考 [Pear Admin Flask 配置搭建](https://pear-admin.gitee.io/pear-admin-site/doc/index.html) 的相关内容。 **采用 Python 版本:** ```3.8.6``` _在开发项目时,推荐使用 >= 3.8.6 的 Python 运行此项目_ **采用 IDE:** ```Visual Studio Code``` _推荐使用 Visual Studio Code、PyCharm 等IDE开发_ ## 快速预览 | | | |---------------------|---------------------| |![输入图片说明](images/image1.png)| ![输入图片说明](images/image2.png) | |![输入图片说明](images/image3.png)| ![输入图片说明](images/image4.png) | |![输入图片说明](images/image5.png)| ![输入图片说明](images/image6.png) | |![输入图片说明](images/image7.png)|![输入图片说明](images/image8.png) | ## 设计计划 - [X] 后台学生信息管理 - [X] 后台成绩发布功能 - [X] 后台成绩基本分析功能 - [X] Excel 导入功能 - [X] 前台学生成绩基本查询与成绩分析 - [ ] 学分管理功能 - [ ] 前台学生各次考试分析 - [ ] 时光邮局(学生给未来的自己寄信) - [ ] 学生 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 官网](https://www.python.org/) 下载。如果您不想要复杂的安装步骤,我们推荐使用**虞颖健**老师打包的 [Python 懒人版](https://gitee.com/yu-yingjian/day_day_up?_from=gitee_search)。点击查看 --> [视频安装教程](https://www.bilibili.com/video/BV1Vd4y197se/?spm_id_from=333.999.0.0) ### 搭建 Pear Admin Flask Pear Admin Flask 的搭建步骤详细可以参考其官方文档,这里进行摘录(注意:此插件是基于 **Pear Admin Flask master** 分支的): #### 环境要求 - Python >= 3.6 - MySQL >= 5.7.0 (非必要,可以使用 SQLite3 作为数据库) _在 Windows 下,对于 MySQL 的搭建,可以使用 [PHPStudy](https://www.xp.cn/) 小皮面板一键搭建 MySQL 环境。为了方便导入 Pear Admin Flask 的原始数据库数据,可以使用 [HeidiSQL](https://www.heidisql.com/download.php) 软件进行操作。_ #### 克隆远程仓库 您可以使用 git 来克隆远程仓库: ```shell # 进入项目主目录 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 主页](https://gitee.com/pear-admin/pear-admin-flask)下载项目仓库。 #### 搭建开发环境 **我们推荐使用 Python 的虚拟环境来开发该项目,这样便于项目的迁移与二次开发。当然,您也可以选择使用原 Python 环境。** 如果你想创建 Python 虚拟环境,你可以使用下面的命令行: ```shell # 在当前目录的venv文件夹创建虚拟环境 python -m venv venv # 激活虚拟环境 venv\Scripts\activate ``` **如果在创建虚拟环境时报错 “ModuleNotFoundError” ,这说明您的 Python 版本小于 3.3 。** #### 安装项目依赖 ```shell # 使用 pip 安装必要模块(对于 master 分支) pip install -r requirement\dev.txt # 安装 此项目依赖 pip install pandas pip install requests pip install openpyxl ``` 或者您可以尝试: ```shell # 使用 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` 并修改如下行: ```python # 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 数据库 请按照配置修改变量: ```python # 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 文件夹)。 ```shell # 进入项目插件目录 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 —— 调试模式下运行 如果你想在调试模式下运行此项目请使用下面的命令: ```shell flask run ``` 或者尝试 ```shell python -m flask run ``` 当然,你也可以调用项目中的 ```app.py``` 运行此项目,如: ```shell python app.py ``` _在实际调试过程中,如果遇到了资源文件加载不完全的情况,请多刷新几次网页,具体原因未知,可能是 Flask 版本的问题。_ #### pywsgi —— 发布项目 如果你只是作为此项目的用户,你可以通过如下的方式更加稳定的运行项目。 安装 pywsgi : ```shell pip install gevent ``` 并修改 app.py 中的内容为: ```python 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