学生考勤签到系统开源分享「Flask+wx-app」
1. 简介 😝
这个项目是一款基于微信小程序和Flask框架开发的应用,旨在帮助学校管理学生的考勤和课程信息。系统通过集成数据库管理、API开发以及前后端交互,实现了便捷的学生考勤记录、课程表管理和教师交互功能。其主要特点包括:
- 微信小程序支持:利用微信小程序的原生语法开发,提供便捷的移动端访问和用户体验。
- Flask框架后端:采用Python Flask框架搭建强大的后端服务,支持多种API接口的开发和管理。
- 多功能模块:包括学生考勤记录、课程表管理、教师考勤发布及审核等功能,满足学校日常管理需求。
- 数据库集成:支持与远程MySQL数据库的连接,实现数据的安全存储和高效管理。
- 持续更新与改进:系统在不断更新和改进中,通过版本迭代新增功能、优化性能,并修复已知问题,以提升系统的稳定性和用户满意度。
当然这个也是我们当时软件工程所交的期末大作业,可能有些许不合理的地方,不过请放心食用~
假若想要了解更多详情可以点击上面的徽章进行外部跳转,它们分别跳转到我们的Github仓库。仓库内也有线上部署的文档,欢迎各路佬提交PR以及提交Issue。
2. 项目结构说明
student_attendance_system
├── MiniProgram
│ ├── app.js # 小程序主脚本文件
│ ├── app.json # 小程序全局配置文件
│ ├── app.wxss # 小程序全局样式表
│ ├── components # 组件目录
│ │ └── ………………… # 组件文件
│ ├── pages # 页面目录
│ │ ├── ………………… # 页面文件
│ │ ├── img # 图片资源目录
│ │ │ ├── loginbg.jpg # 登录背景图
│ │ │ ├── ………………… # 其他图片
│ ├── project.config.json # 项目配置文件
│ ├── project.private.config.json # 私有项目配置文件
│ ├── sitemap.json # 小程序站点地图文件
│ └── utils # 工具类文件目录
│ ├── ………………… # 工具文件
├── app.py # 主应用脚本
├── datasets # 数据集目录
│ ├── save_table.py # 数据表保存脚本
│ └── 学生考勤系统数据库用例表.xlsx # 数据库用例表
├── docs # 文档目录
│ ├── API # API 文档目录
│ │ ├── ………………… # API 文档文件
│ ├── QuickStart.md # 快速开始文档
│ ├── README.md # 项目简介文档
│ ├── _sidebar.md # 文档侧边栏配置文件
│ ├── index.html # 文档主页
│ ├── 系统实现.docx # 系统实现文档
│ ├── 需求分析.docx # 需求分析文档
│ ├── 代码规范.md # 代码规范文档
│ ├── 数据库设计.docx # 数据库设计文档
│ ├── 系统设计(UML与设计模式).docx # 系统设计文档(包含 UML 和设计模式)
│ ├── 系统安全性问题.docx # 系统安全性问题文档
│ └── 项目特色与创新点.docx # 项目特色与创新点文档
├── ds_tools # 数据结构工具目录
│ ├── pycache # 缓存目录
│ │ └── data_structure.cpython-38.pyc # 数据结构缓存文件
│ └── data_structure.py # 数据结构脚本
├── models # 数据模型目录
│ ├── pycache # 缓存目录
│ │ ├── ………………… # 缓存文件
│ ├── attendence_information_table.py # 考勤信息表模型
│ ├── class_schedule_table.py # 课程表模型
│ ├── course_selection_table.py # 选课表模型
│ ├── course_table.py # 课程表模型
│ ├── post_attendance_table.py # 发布考勤信息表模型
│ ├── student_information_table.py # 学生信息表模型
│ └── teacher_information_table.py # 教师信息表模型
├── project.config.json # 项目配置文件
├── project.private.config.json # 私有项目配置文件
├── requirements.txt # 依赖库配置文件
├── routes # 路由目录
│ ├── init.py # 路由初始化文件
│ ├── pycache # 缓存目录
│ │ ├── ………………… # 缓存文件
│ ├── student_routes.py # 学生路由脚本
│ └── teacher_routes.py # 教师路由脚本
├── sql # SQL 脚本目录
│ ├── create_procedure.sql # 存储过程创建脚本
│ ├── create_tabel.sql # 数据表创建脚本
│ ├── create_trigger.sql # 触发器创建脚本
│ ├── create_view.sql # 视图创建脚本
│ └── init # 初始化 SQL 脚本目录
│ ├── attendance_information.sql # 初始化考勤信息数据
│ ├── class_schedule.sql # 初始化课程表数据
│ ├── course.sql # 初始化课程数据
│ ├── course_selection.sql # 初始化选课数据
│ ├── post_attendance_information.sql # 初始化发布考勤信息数据
│ ├── student_information.sql # 初始化学生信息数据
│ └── teacher_information.sql # 初始化教师信息数据
├── student_attendance_system.drawio # 系统架构图文件
├── test # 测试目录
│ ├── pycache # 缓存目录
│ │ ├── ………………… # 缓存文件
│ ├── test_student_routes.py # 学生路由测试脚本
│ └── test_teacher_routes.py # 教师路由测试脚本
└── utils # 工具目录
├── pycache # 缓存目录
│ └── database_manager.cpython-38.pyc # 数据库管理缓存文件
└── database_manager.py # 数据库管理脚本
3. 怎么快速开始
这部分可以参考线上文档,内也有一样的教程~
3.1 后端Flask的快速部署
在这部分你需要有:
- MySql 8.3.0
- conda环境
- 一个数据库管理工具(以Navicat为例)
你准备了以上工具后,我们就开始部署吧~
3.1.1 数据库快速导入
- 打开Navicat选择本地连接,新建一个数据库
注:建议新建的数据库名为“StudentAttendancnSystemDB”,不然请自行修改utils\database_manager.py里面的db_name
-
右键该新建的数据库,在选择栏中选择“运行SQL文件”
-
依次导入sql文件夹中的init文件夹下所有sql文件,如:sql/init/xxx.sql
3.1.2 虚拟环境的创建
-
在Terminal中创建一个新的conda虚拟环境,名为Flask。
conda create -name Flask python=3.8
-
激活新建的虚拟环境。
conda activate Flask
-
安装该项目的所有依赖
conda install --file requirements.txt
或者mamba install --file requirements.txt
3.1.3 数据库连接文件修改
- 在utils文件夹中找到database_manager.py文件
- 修改__init_函数的参数中的
db_user
/db_password
/db_host
等参数
def __init__(self, table_name, db_user='your_user', db_password='your_password', db_host='127.0.0.1', db_port=3306, db_name='StudentAttendancnSystemDB', ):
self.db_user = db_user
self.db_password = db_password
self.db_host = db_host
self.db_port = db_port
self.db_name = db_name
self.table_name = table_name
self.engine = create_engine(self._get_connection_string())
self.df = None
注:这里的db_name
参数可以不用改,假如前面是按照该名称创建的数据库
完成上述步骤就可以启动后端了,在terminal中输入python app.py
启动后端。返回如下信息则为开启服务成功
Flask app is running on http://0.0.0.0:5000
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://192.168.43.207:5000
Press CTRL+C to quit
3.1.4 进行端口测试
测试文件放在了test文件夹下,里面有两个路由测试文件,学生路由和老师路由的~
Student Attendance System/
│
├── app.py
.......
├── test/
│ ├── test_teacher_routes.py
│ └── test_student_routes.py
使用pytest来进行路由端口测试,使用pytest test/test_student_routes.py
来测试学生路由的端口是否正常,老师路由同理。通过的返回信息如下
(Flask) hiddensharp429@ZixiandeMBP Student Attendance System % pytest test/test_student_routes.py
============================================================== test session starts ==============================================================
platform darwin -- Python 3.8.19, pytest-8.2.2, pluggy-1.5.0
rootdir: /Users/hiddensharp429/Code/PYTHON/Student Attendance System
collected 7 items
test/test_student_routes.py ....... [100%]
=============================================================== warnings summary ================================================================
models/attendence_information_table.py:17
/Users/hiddensharp429/Code/PYTHON/Student Attendance System/models/attendence_information_table.py:17: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
Base = declarative_base()
models/class_schedule_table.py:15
/Users/hiddensharp429/Code/PYTHON/Student Attendance System/models/class_schedule_table.py:15: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
Base = declarative_base()
models/course_selection_table.py:15
/Users/hiddensharp429/Code/PYTHON/Student Attendance System/models/course_selection_table.py:15: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
Base = declarative_base()
models/course_table.py:16
/Users/hiddensharp429/Code/PYTHON/Student Attendance System/models/course_table.py:16: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
Base = declarative_base()
models/post_attendance_table.py:17
/Users/hiddensharp429/Code/PYTHON/Student Attendance System/models/post_attendance_table.py:17: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
Base = declarative_base()
models/student_information_table.py:16
/Users/hiddensharp429/Code/PYTHON/Student Attendance System/models/student_information_table.py:16: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
Base = declarative_base()
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================================================= 7 passed, 6 warnings in 0.28s =========================================================
显示全部都是passed的即为通过测试。
3.2 前端wx—miniprogram的快速部署
3.2.1 注册帐号(可选)以及工具安装
- 小程序开发的第一步,是去微信公众平台注册,申请一个 AppID,这是免费的。
注:这步不是必须的,假如不是自己想开发一个微信小程序,可以直接使用测试号,不需要自己注册一个AppID
- 下载微信提供的小程序开发工具。这个工具是必需的,因为只有它才能运行和调试小程序源码。
注:开发者工具支持 Windows 和 MacOS 两个平台。我装的是 MacOS (64位)的版本'
- 安装好打开这个软件,会要求你使用微信扫描二维码登录。
- 登录后,进入新建项目的页面,点击右侧的+号,就跳出了新建小程序的页面。
3.2.2 导入项目
- 我们需要导入项目文件里的
Miniprogram
文件 - 可以选择用自己的AppID或者测试号
- 进入开发工具页面,完成项目导入
3.2.3 测试登陆
- 在首页输入测试帐号
2021611011
- 在首页输入测试姓名“张三”
- 点击登陆后查看是否成功,若不成功请查看API文档中的相关的API错误码说明
结束语
如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?你们的认可是我最大的分享动力!
本文来自博客园,作者:hiddenSharp429,转载请注明原文链接:https://www.cnblogs.com/hiddensharp429/p/18297214