微信小程序+Flask教务系统开源:青果教务系统登录与数据获取实战
基于原生微信小程序和Flask开发的教务查询系统,支持课程表、成绩查询等功能
📚 项目概述
本项目是一个基于微信小程序(前端)和Flask(后端)开发的教务系统查询工具,专门针对青果教务系统进行了适配开发。虽然项目功能尚未完全完善,但提供了完整的青果教务系统登录思路和数据获取方案,适合开发者学习和二次开发。
图片演示
下载链接:
🏗️ 技术架构
前端技术栈
- 微信小程序原生开发:使用WXML、WXSS、JavaScript
- UI组件:自定义组件和基础组件结合
- 网络请求:wx.request API与后端交互
后端技术栈
- Flask框架:轻量级Python Web框架
- 数据库:MySQL,支持自动建表
- 请求处理:requests库处理教务系统请求
- 会话管理:Flask-Session管理用户状态
🚀 快速开始
环境要求
后端环境:
- Python 3.7+
- Flask 2.0+
- MySQL 5.7+
- PyCharm(推荐开发工具)
前端环境:
- 微信开发者工具
- 小程序AppID
安装部署步骤
1. 后端部署
# 克隆或下载项目
# 进入后端目录
cd back
# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 如果没有requirements.txt,手动安装主要依赖
pip install flask flask-cors flask-session requests pymysql
2. 数据库配置
# 修改app.py中的数据库配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost:3306/education_system'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
3. 启动后端服务
# 在PyCharm中直接运行app.py
# 或在终端执行
python app.py
# 服务默认运行在 http://127.0.0.1:5000
4. 前端配置
- 打开微信开发者工具
- 导入小程序项目
修改
app.js
中的API地址// 修改API基础地址 const baseUrl = 'http://localhost:5000';
🔐 青果教务系统登录思路
核心登录流程
# Flask后端登录处理示例
@app.route('/api/login', methods=['POST'])
def login():
try:
# 获取前端传递的学号和密码
student_id = request.json.get('student_id')
password = request.json.get('password')
# 青果教务系统登录步骤
# 1. 获取登录页面,提取隐藏参数
session = requests.Session()
login_page = session.get(LOGIN_URL)
hidden_params = extract_hidden_params(login_page.text)
# 2. 构造登录请求数据
login_data = {
'__VIEWSTATE': hidden_params['viewstate'],
'txtUserName': student_id,
'TextBox2': password,
'RadioButtonList1': '学生',
'Button1': ''
}
# 3. 提交登录请求
response = session.post(LOGIN_URL, data=login_data)
# 4. 验证登录是否成功
if check_login_success(response.text):
# 保存session供后续请求使用
save_user_session(student_id, session)
return jsonify({'success': True, 'message': '登录成功'})
else:
return jsonify({'success': False, 'message': '登录失败'})
except Exception as e:
return jsonify({'success': False, 'message': str(e)})
数据获取示例
# 获取课程表示例
def get_course_schedule(session, semester):
"""获取指定学期的课程表"""
course_url = f'{BASE_URL}/xskbcx.aspx?xh={student_id}&xm={name}&gnbm=Dlxsckb'
# 设置请求参数
data = {
'__EVENTTARGET': 'xqd',
'__EVENTARGUMENT': '',
'xqd': semester
}
response = session.post(course_url, data=data)
courses = parse_course_table(response.text)
return courses
# 解析课程表HTML
def parse_course_table(html):
"""解析课程表页面"""
courses = []
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table', {'id': 'Table1'})
# 解析表格数据
for row in table.find_all('tr')[1:]:
cells = row.find_all('td')
if len(cells) > 1:
course = {
'time': cells[0].text.strip(),
'monday': cells[1].text.strip(),
'tuesday': cells[2].text.strip(),
# ... 其他天数
}
courses.append(course)
return courses
🛠️ 项目结构
教务系统/
├── back/ # Flask后端
│ ├── app.py # 主应用文件
│ ├── config.py # 配置文件
│ ├── models.py # 数据模型
│ ├── utils/ # 工具类
│ │ ├── qingguo.py # 青果教务系统处理
│ │ └── database.py # 数据库操作
│ └── requirements.txt # 依赖列表
│
├── front/ # 微信小程序前端
│ ├── pages/ # 页面文件
│ │ ├── index/ # 首页
│ │ ├── schedule/ # 课程表
│ │ └── grades/ # 成绩查询
│ ├── components/ # 自定义组件
│ ├── utils/ # 工具函数
│ └── app.js # 小程序入口
│
└── README.md # 说明文档
💡 功能模块
已实现功能
- ✅ 青果教务系统登录
- ✅ 课程表查询
- ✅ 成绩查询
- ✅ 用户会话管理
- ✅ 基础数据库操作
待完善功能
- 🔲 考试安排查询
- 🔲 空教室查询
- 🔲 个人信息管理
- 🔲 成绩统计分析
- 🔲 课表导出功能
🎨 前端界面优化建议
WXML结构优化
<!-- 课程表页面示例 -->
<view class="schedule-container">
<view class="week-selector">
<picker range="{{semesters}}" value="{{semesterIndex}}" bindchange="changeSemester">
<view class="picker">当前学期:{{semesters[semesterIndex]}}</view>
</picker>
</view>
<scroll-view scroll-y class="schedule-table">
<view class="table-row" wx:for="{{courseTable}}" wx:key="index">
<view class="time-cell">{{item.time}}</view>
<view class="course-cell" wx:for="{{item.courses}}" wx:key="day">
<text class="course-name">{{item.course}}</text>
<text class="course-location">{{item.location}}</text>
</view>
</view>
</scroll-view>
</view>
WXSS样式优化
/* 现代样式设计 */
.schedule-container {
padding: 20rpx;
background: #f5f5f5;
}
.table-row {
display: flex;
margin-bottom: 10rpx;
background: #fff;
border-radius: 12rpx;
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.1);
}
.time-cell {
width: 120rpx;
padding: 20rpx;
background: #4a90e2;
color: white;
text-align: center;
}
.course-cell {
flex: 1;
padding: 20rpx;
border-left: 1rpx solid #eee;
}
🔧 常见问题解决
1. 登录失败问题
# 检查青果教务系统页面结构是否变化
def check_login_success(html):
"""检查登录是否成功"""
if "用户名或密码错误" in html:
return False
elif "欢迎您" in html:
return True
# 可能需要根据实际情况调整检测逻辑
return False
2. Session维护问题
# 使用Flask-Session管理用户会话
from flask_session import Session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
3. 跨域问题处理
# 添加CORS支持
from flask_cors import CORS
CORS(app, supports_credentials=True, resources={r"/api/*": {"origins": "*"}})
🔒 安全建议
代码保护建议
虽然本项目使用Python开发,但对于PHP开发者,推荐使用:
PHP代码加密平台 提供:
- 多种加密方式:Sg16、Deck3、Ic12等版本
- 灵活的方案:支持goto、enphp、noname等加密方式
- 完全免费:全站免费使用
- 易于使用:轻松保护代码安全
安全最佳实践
- 使用HTTPS:生产环境务必启用HTTPS
- 参数验证:对所有输入参数进行严格验证
- 错误处理:避免向用户暴露敏感错误信息
- 定期更新:保持依赖库的最新版本
🎓 学习价值
这个项目对于学习者来说具有很高的价值:
- 微信小程序开发:学习原生小程序开发技术
- Flask后端开发:掌握Python Web开发技能
- 网络爬虫技术:了解如何与教务系统交互
- 前后端分离:实践前后端分离架构设计
- 项目实战经验:积累完整的项目开发经验
💭 结语
这个青果教务系统查询工具虽然界面相对简单,但提供了完整的登录思路和技术实现方案。对于想要学习微信小程序开发和Flask后端的开发者来说,这是一个很好的学习项目。
项目特点:
- 🎯 专为青果教务系统定制
- 🔐 完整的登录认证方案
- 📱 微信小程序前端
- 🐍 Flask后端API
- 🗃️ MySQL数据存储
使用建议:
- 先在后端调试登录功能
- 逐步完善各个查询模块
- 优化前端用户体验
- 添加错误处理和加载状态
- 考虑数据缓存机制
如果在使用过程中遇到任何问题,欢迎在评论区留言讨论!我会尽力帮助大家解决遇到的问题。
温馨提示:请仅将本项目用于学习目的,遵守学校相关规定,尊重教务系统的使用条款。
66666666666666666