基于Flask+Jinja2的快捷教务系统(后端链接到新版正方教务系统)

快捷教务系统(Easy Educational Administration Management System, EasyEAMS)

项目简介

EasyEAMS 是一个基于 Flask + Jinja2 的现代化教务系统 Web 应用。学生可通过网页端登录,在线查询个人信息、成绩、课表、学业生涯、通知、选课等。系统界面美观,交互友好,适合高校学生自助使用和二次开发。

本项目的 api.py 文件内容参考并引用了 Github 上openschoolcn的正方教务系统 API 项目,并在此基础上做了适配和优化。

适配/更新说明

该程序当前已经适配PC Web端以及移动设备Web端。同时我会及时项目,感兴趣的朋友可以点击链接查看/下载最新版本。

主要功能

  • 用户登录:支持学号和密码登录,部分情况支持验证码登录。
  • 个人信息:展示学生基本信息、学籍、联系方式等。
  • 成绩查询:按学年/学期查询课程成绩,支持全年成绩一览。
  • 课表查询:按学年/学期展示课程表,课程时间、地点、教师一目了然。
  • 学业生涯:统计学分绩点、计划内外课程完成情况,课程分项明细,计划内总课程饼图可视化。
  • 通知公告:查看系统通知、公告等消息。
  • 已选课程:查询当前学年/学期已选课程,含课程详情。
  • 板块课列表:按板块编号查询可选课程。
  • 考试安排:查看当前学期考试考场安排信息。
  • 安全退出:一键安全退出系统。

登录页
主页

适配不同学校教务系统说明

本系统以我的学校新版正方教务管理系统为例开发。只要你的学校使用的是新版正方教务管理系统(即新版“正方教务系统”Web端),均可直接使用本程序,无需修改核心代码。

切换学校教务系统网址教程

  1. 找到你学校教务系统的网址
    一般格式为:

    https://zfjw.学校域名/jwglxt/
    

    例如:

    • 我学校教务管理系统网址为 https://zfjw.ntit.edu.cn/jwglxt/
    • 其他学校请在浏览器登录教务系统后,复制浏览器地址栏的前缀部分(直到 /jwglxt/)。
  2. 修改后端配置
    打开项目根目录下的 app.py 文件,找到如下代码(一般在前面几行):

    BASE_URL = "https://zfjw.ntit.edu.cn/jwglxt/"
    

    将其修改为你学校的教务系统网址。例如:

    BASE_URL = "https://zfjw.你的学校域名/jwglxt/"
    
  3. 保存并重启服务
    保存 app.py 文件后,重启 Flask 服务:

    python app.py
    
  4. 重新登录
    在浏览器访问首页,使用你学校的学号和密码登录即可。

注意事项:

  • 仅支持新版正方教务系统(URL 结构和页面风格与南通理工学院类似)。
  • 若遇到兼容性问题或接口变动,请反馈 issue 或自行适配 api.py 相关接口。

api.py 教务系统接口适配教程

有些学校的新版正方教务系统虽然大体接口一致,但部分接口路径、参数或登录方式可能略有不同。你可以通过修改 api.py 文件进行适配。

1. 主要适配点
  • BASE_URL:主机地址(已在 app.py 说明)
  • 登录接口路径、参数(如 login_url、key_url、kaptcha_url 等)
  • 数据接口路径(如个人信息、成绩、课表、通知等接口的 URL)
  • 请求参数/字段名(部分学校字段名可能不同)
  • 验证码、加密方式(部分学校登录需要验证码或特殊加密)
2. 具体修改方法

步骤一:定位接口配置

打开 api.py,在 Client 类的 __init__ 方法中,找到如下代码:

self.base_url = kwargs.get("base_url")
self.key_url = urljoin(self.base_url, "xtgl/login_getPublicKey.html")
self.login_url = urljoin(self.base_url, "xtgl/login_slogin.html")
self.kaptcha_url = urljoin(self.base_url, "kaptcha")
# 其他接口路径...

如果你学校的接口路径不同,请将上述路径修改为实际路径。

步骤二:调整接口参数

如登录参数名不同(如 csrftoken、yhm、mm),可在 loginlogin_with_kaptcha 方法中调整:

login_data = {"csrftoken": csrf_token,"yhm": sid,"mm": encrypt_password,# 可能还需要其他参数
}

如有参数名不同,按实际接口文档或抓包结果修改。

步骤三:调整数据接口

如成绩、课表、个人信息等接口路径或参数不同,找到对应的 get_gradeget_scheduleget_info 等方法,修改 urldata 字典即可。

步骤四:调试与验证

  • 可用浏览器开发者工具或抓包工具(如 Fiddler、Charles)对比你学校教务系统的实际请求和响应。
  • 若遇到接口报错、数据为空等,优先检查 URL 和参数是否与实际一致。

步骤五:如需特殊适配

  • 某些学校可能有自定义加密、验证码、二次认证等特殊逻辑,可在对应方法中补充实现。
  • 如需帮助,可将抓包信息或接口文档反馈给开发者。

示例:如何修改登录接口路径

假设你学校的登录接口为 /auth/login.html,公钥接口为 /auth/getKey.html,则只需在 api.py__init__ 方法中:

self.key_url = urljoin(self.base_url, "auth/getKey.html")
self.login_url = urljoin(self.base_url, "auth/login.html")

温馨提示
  • 大部分新版正方系统接口结构类似,通常只需改 URL 前缀即可。
  • 若遇到复杂适配问题,建议先抓包分析,再逐步修改代码。

安装与运行

1. 克隆项目

git clone https://gitee.com/JXX_CODE/easy-eam.git
cd easy-eam

2. 安装依赖

建议使用 Python 3.8 及以上版本,推荐使用虚拟环境。

pip install -r requirements.txt

3. 准备加密用户登录信息

当前使用rsa生成公钥和私钥分别对应前端和后端,第一次使用本程序需要先运行rsa_key.py生成两串钥匙,命令如下:

python rsa_key.py

4. 启动服务

python app.py

默认访问地址为 http://127.0.0.1:5000/,可在浏览器中打开。

目录结构

easy-eam/
├── app.py                # Flask 主程序
├── api.py                # 教务系统核心逻辑
├── copyright.py          # 开源声明
├── requirements.txt      # 依赖包
├── static/               # 静态资源(图片、SVG等)
├── templates/            # 前端页面模板
└── README_zh.md          # 中文说明文档

使用说明

  1. 启动后访问首页,输入学号和密码登录。
  2. 登录成功后进入菜单页,点击各功能卡片进入相应页面。
  3. 各页面均可通过左上角“返回菜单”按钮返回主菜单。
  4. 顶栏显示当前登录学生信息,右侧可一键退出。
  5. 页面底部可查看开源声明,点击弹窗显示详细内容。
  6. 如需显示学校logo,仅需将学校的logo下载并命名为”school_logo.png",放置在static/img目录下,刷新页面即可显示。

注意事项

  • 本系统仅供学习交流使用,严禁用于商业或非法用途。
  • 仅支持已开通教务系统账号的学生使用。
  • 登录信息、操作日志仅保留必要内容,敏感信息不会被记录。
  • 日志自动清理,最多保留近 1 个月内容。

开源协议

本项目遵循 GNU GPL v3 开源协议。


如需二次开发或遇到问题,欢迎 issue !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88015.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDM自动化与出海独立开发实用教程

随着互联网全球化发展,越来越多的独立开发者(Indie Developer)选择将自己的产品推向海外市场。如何高效地获客、激活用户、提升转化率,成为出海过程中必须解决的问题。EDM(电子邮件营销)自动化,…

「日拱一码」017 深度学习常用库——TensorFlow

目录 基础操作 张量操作: tf.constant 用于创建常量张量 tf.Variable 用于创建可训练的变量张量 tf.reshape 可改变张量的形状 tf.concat 可将多个张量沿指定维度拼接 tf.split 则可将张量沿指定维度分割 数学运算: tf.add 张量的加运算 tf.su…

ARM DStream仿真器脚本常用命令

以下是ARM DStream仿真器脚本中常用的命令及其功能分类,结合调试流程和典型应用场景整理: ⚙️ 一、连接与初始化命令 connect 建立与目标设备的连接,需指定接口类型(如JTAG/SWD)和处理器核心。 示例:conne…

vscode 调试unity

lanch.json { “version”: “0.2.0”, “configurations”: [ { “name”: “Attach to Unity”, “type”: “vstuc”, “request”: “attach” } ] }

金融IT入门知识点

银行金融IT核心知识点全解析:架构、技术与实践 一、金融IT的战略地位与行业特性 金融IT作为银行业务的核心支撑体系,其发展水平直接决定了银行服务的效率、安全性与创新能力。截至 2025年,中国银行业线上化业务占比已达97%,手机银…

C++——手撕智能指针、单例模式、线程池、String

智能指针今天我们来学习一下C中的智能指针,如果有人不知道C中的智能指针的概念的话:C智能指针是一种基于RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制的高级内存管理工具,用于自动化…

Mybatis----留言板

基础项目:留言板 截止到目前为止,我们已经学习了 Spring(只学习了DI)、Spring MVC、SpringBoot、Mybatis 这些知识了,已经满足了做简单项目的基本要求了,所以接下来我们就从0到1实现表白墙项目。 需求分析…

Web-API-day3 DOM事件进阶

一、 事件流 1.事件冒泡 const fa document.querySelector(.father)const son document.querySelector(.son)document.addEventListener(click, function () {alert(我是爷爷)})fa.addEventListener(click, function () {alert(我是爸爸)})son.addEventListener(click, fun…

小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)

效果一览一、传统KAN网络的痛点与突破 1. 传统KAN的局限性 传统Kolmogorov-Arnold网络(KAN)虽在理论上有可靠的多变量函数逼近能力,但存在显著瓶颈: 计算效率低:训练速度慢于MLP,资源消耗大,尤其…

tomcat部署多个端口以及制定路径部署-vue3

vue3项目tomcat部署记录 使用hash路由 字符串拼接的图片地址可以使用import.meta.env.BASE_URL 默认8080 如果部署地址为8080/xc 则设置 vite.config.js中设置base为’/xc/’ outDir设置为xc 打包产物直接拖到webapps目录下 如果另开一个端口 如8081 设置根目录访问 conf/ser…

LeetCode三数之和-js题解

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&…

Flink SQLServer CDC 环境配置与验证

一、SQL Server 数据库核心配置 1. 启用 CDC 功能(Change Data Capture) SQL Server CDC 依赖数据库级别的 CDC 功能及表级别的捕获配置,需按以下步骤启用: 启用数据库 CDC -- 以管理员身份连接数据库 USE master; GO-- 检查数…

软考(软件设计师)存储管理—设备管理,磁盘调度

I/O软件的核心目标是管理硬件差异、提供统一接口、实现高效可靠的数据传输。 核心目标: 设备无关性: 应用程序无需关心具体硬件细节。错误处理: 处理硬件错误和传输异常。同步/异步传输: 支持阻塞(等待完成&#xff09…

[C语言] C语言数学函数库概览

C语言数学函数库概览 文章目录 C语言数学函数库概览一、概述二、基本数学函数详解1. 平方根函数 sqrt(x)2. 幂函数 pow(x, y)3. 绝对值函数 fabs(x)4. 向上取整函数 ceil(x)5. 向下取整函数 floor(x) 三、三角函数与双曲函数详解1. 正弦函数 double sin(double x)2. 余弦函数 d…

【简单三步】Stable diffusion Webai本地部署无法加载模型并报openai/clip-vit-large-patch14错误的解决方法

问题描述 Stable diffusion Webai本地部署成功后,手动加载本地模型checkpoint时,始终无法加载进去,确定模型存放位置无误(位于models\Stable-diffusion)查看cmd窗口时,发现一个报错提示:Can’t …

Java 命令行参数详解:系统属性、JVM 选项与应用配置

Java 命令行参数详解:系统属性、JVM 选项与应用配置 在 Java 应用启动命令中,如: java -jar -Dserver.port8088 xdr-demo-1.0-SNAPSHOT-assembly.jar &-Dserver.port8088是一个 系统属性(System Property) 设置。…

【论文笔记】World Models for Autonomous Driving: An Initial Survey

原文链接:https://ieeexplore.ieee.org/abstract/document/10522953 1. 世界模型的发展 A. 世界模型的结构基础 世界模型包含4个关键组件,以模拟人类连贯的思考和决策过程。 a)感知模块使用如变分自编码器(VAE)、掩…

Spring Cloud Config(微服务配置中心详解)

关键词:Spring Cloud Config、配置中心、远程仓库、动态刷新、加密解密 ✅ 摘要 在微服务架构中,随着服务数量的增加,统一管理各服务的配置信息变得尤为重要。传统的本地配置文件方式难以满足多环境、多实例、集中化的需求。 Spring Cloud …

【Note】《深入理解Linux内核》 第二十章:深入理解 Linux 程序执行机制

《深入理解Linux内核》 第二十章:深入理解 Linux 程序执行机制(Program Execution)关键词:exec 系列系统调用、可执行文件格式(ELF)、用户地址空间、内存映射、动态链接、栈初始化、入口点、共享库、内核态…

服务器如何配置防火墙规则以阻止恶意流量和DDoS攻击?

防火墙是保护服务器免受恶意流量和 DDoS 攻击的第一道防线。通过合理配置防火墙规则,可以有效阻止恶意访问、限制不必要的流量,并减少攻击对服务器的影响。以下是配置防火墙规则的全面指南,包括基础规则设置、防御 DDoS 攻击的高级策略和最佳…