学生考勤签到系统开源分享「Flask+wx-app」

1. 简介 😝

这个项目是一款基于微信小程序Flask框架开发的应用,旨在帮助学校管理学生的考勤和课程信息。系统通过集成数据库管理、API开发以及前后端交互,实现了便捷的学生考勤记录、课程表管理和教师交互功能。其主要特点包括:

  1. 微信小程序支持:利用微信小程序的原生语法开发,提供便捷的移动端访问和用户体验。
  2. Flask框架后端:采用Python Flask框架搭建强大的后端服务,支持多种API接口的开发和管理。
  3. 多功能模块:包括学生考勤记录、课程表管理、教师考勤发布及审核等功能,满足学校日常管理需求。
  4. 数据库集成:支持与远程MySQL数据库的连接,实现数据的安全存储和高效管理。
  5. 持续更新与改进:系统在不断更新和改进中,通过版本迭代新增功能、优化性能,并修复已知问题,以提升系统的稳定性和用户满意度。

当然这个也是我们当时软件工程所交的期末大作业,可能有些许不合理的地方,不过请放心食用~
假若想要了解更多详情可以点击上面的徽章进行外部跳转,它们分别跳转到我们的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的快速部署

在这部分你需要有:

  1. MySql 8.3.0
  2. conda环境
  3. 一个数据库管理工具(以Navicat为例)

你准备了以上工具后,我们就开始部署吧~

3.1.1 数据库快速导入

  1. 打开Navicat选择本地连接,新建一个数据库

注:建议新建的数据库名为“StudentAttendancnSystemDB”,不然请自行修改utils\database_manager.py里面的db_name

  1. 右键该新建的数据库,在选择栏中选择“运行SQL文件”

  2. 依次导入sql文件夹中的init文件夹下所有sql文件,如:sql/init/xxx.sql

3.1.2 虚拟环境的创建

  1. 在Terminal中创建一个新的conda虚拟环境,名为Flask。conda create -name Flask python=3.8

  2. 激活新建的虚拟环境。conda activate Flask

  3. 安装该项目的所有依赖 conda install --file requirements.txt或者mamba install --file requirements.txt

3.1.3 数据库连接文件修改

  1. 在utils文件夹中找到database_manager.py文件
  2. 修改__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 注册帐号(可选)以及工具安装

  1. 小程序开发的第一步,是去微信公众平台注册,申请一个 AppID,这是免费的。

注:这步不是必须的,假如不是自己想开发一个微信小程序,可以直接使用测试号,不需要自己注册一个AppID

  1. 下载微信提供的小程序开发工具。这个工具是必需的,因为只有它才能运行和调试小程序源码。

注:开发者工具支持 Windows 和 MacOS 两个平台。我装的是 MacOS (64位)的版本'

  1. 安装好打开这个软件,会要求你使用微信扫描二维码登录。
  2. 登录后,进入新建项目的页面,点击右侧的+号,就跳出了新建小程序的页面。

3.2.2 导入项目

  1. 我们需要导入项目文件里的Miniprogram文件
  2. 可以选择用自己的AppID或者测试号
  3. 进入开发工具页面,完成项目导入

3.2.3 测试登陆

  1. 在首页输入测试帐号2021611011
  2. 在首页输入测试姓名“张三”
  3. 点击登陆后查看是否成功,若不成功请查看API文档中的相关的API错误码说明


结束语

如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?你们的认可是我最大的分享动力!

热门相关:重生田园贵媛:名门暖婚   强宠头号鲜妻:陆少,滚!   一级BOSS:你结婚,我劫婚   恶魔总裁霸道宠:老婆,太惹火   剑道邪尊Ⅱ