小明:嘿,李老师,我最近在做一个学工管理系统,想加个演示功能,您能教我怎么实现吗?
李老师:当然可以。你先说说你的需求是什么?演示功能具体要做什么?
小明:我想让管理员能够快速展示学生的个人信息、成绩、奖惩记录等,不需要手动输入,而是从数据库里自动提取数据并展示出来。
李老师:明白了,这其实是一个典型的“演示”模块,也就是所谓的“预览”或“展示”功能。我们可以用Web框架来实现,比如Django或者Flask。你想用哪个?
小明:我对Flask比较熟悉,想用它来开发。
李老师:好,那我们先搭建一个简单的Flask项目结构,然后添加一个路由来处理演示请求。
小明:好的,那我先创建一个虚拟环境,安装Flask。
李老师:对的,接下来你需要创建一个基本的Flask应用,例如app.py文件,里面包含一个主路由,比如 '/',然后返回一个HTML页面。
小明:那HTML页面需要显示哪些内容呢?
李老师:你可以设计一个表格,用来展示学生的基本信息,比如姓名、学号、班级、成绩等。这些数据可以从数据库中获取。
小明:那数据库怎么连接呢?我用的是MySQL。
李老师:可以用SQLAlchemy来连接数据库。首先,你需要配置数据库连接字符串,然后定义一个Student模型,用来映射到学生表。
小明:明白了,那我先写一下模型部分。
李老师:没错,下面是一个简单的Student模型示例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'
db = SQLAlchemy(app)
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
student_id = db.Column(db.String(20), unique=True)
class_name = db.Column(db.String(50))
score = db.Column(db.Float)
reward = db.Column(db.Text)
小明:这样就能把学生信息存进数据库了。那演示功能怎么调用这些数据呢?
李老师:你可以在路由中查询所有学生,然后传递给模板,渲染成表格。
小明:那我应该怎么写视图函数呢?
李老师:看这个例子:
@app.route('/demo')
def demo():
students = Student.query.all()
return render_template('demo.html', students=students)
小明:那模板文件demo.html应该长什么样?
李老师:你可以用Jinja2模板引擎,写一个简单的表格来展示学生信息:
学生信息演示
学生信息演示
| 姓名 | 学号 | 班级 | 成绩 | 奖惩 |
|---|---|---|---|---|
| {{ student.name }} | {{ student.student_id }} | {{ student.class_name }} | {{ student.score }} | {{ student.reward }} |
小明:这样就能动态显示学生信息了。那如果我要支持按学号筛选学生呢?
李老师:你可以添加一个搜索框,让用户输入学号,然后在视图中根据学号查询学生。
小明:那怎么实现呢?
李老师:修改一下视图函数,加上参数判断,比如:
@app.route('/demo')
def demo():
student_id = request.args.get('student_id')
if student_id:
students = Student.query.filter_by(student_id=student_id).all()
else:
students = Student.query.all()
return render_template('demo.html', students=students)
小明:这样用户就可以通过URL参数来筛选学生了。那前端页面该怎么加搜索框呢?
李老师:在demo.html中加一个表单,提交到同一个路由,比如:
小明:这样就实现了搜索功能。那如果我想展示更多字段,比如家庭住址、联系方式呢?
李老师:那就需要在模型中增加对应的列,然后在模板中展示。
小明:明白了,那我再扩展一下模型,加几个字段。
李老师:是的,模型的设计要灵活,适应未来可能的变化。
小明:那我现在有了一个基础的演示功能,可以展示学生信息,还能按学号查询,感觉挺不错的。
李老师:是的,这就是一个完整的演示功能的实现过程。你可以继续扩展,比如加入分页、导出Excel等功能。
小明:嗯,以后我还可以用这个演示功能作为学生管理的一部分,方便管理员快速查看学生数据。
李老师:没错,这样的功能对于学工管理系统来说非常实用。希望你能继续完善它。
小明:谢谢您,李老师!我会继续努力的。
李老师:不客气,有问题随时来找我。
