小明:嘿,小李,我最近在做一个研究生管理信息系统的项目,想请你帮忙看看。
小李:哦,研究生管理系统?听起来挺复杂的。你是用什么语言写的?
小明:我用了Python,因为我觉得Python比较适合快速开发,而且有很多现成的库可以用。
小李:那你怎么设计这个系统的结构呢?是不是有数据库?
小明:对,我用的是SQLite数据库,因为它轻量级,不需要安装服务器,非常适合小型项目。
小李:那数据怎么存储?学生信息、课程信息这些?
小明:我创建了两个表,一个是学生表,一个是课程表。学生表包括学号、姓名、性别、专业、导师等字段;课程表包括课程编号、课程名称、学分、授课老师等。
小李:那你是怎么实现增删改查功能的?有没有用到框架?
小明:我用的是Flask框架,它简单易用,适合做Web应用。前端我用的是HTML和CSS,后端用Python处理逻辑。
小李:那你能给我看一下代码吗?我想了解具体怎么实现的。
小明:当然可以,我写了一个简单的示例,你可以看看。
1. 数据库设计
首先,我需要创建一个SQLite数据库,并定义两个表:学生表(students)和课程表(courses)。
import sqlite3
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
# 创建学生表
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY,
student_id TEXT UNIQUE,
name TEXT,
gender TEXT,
major TEXT,
advisor TEXT
)
''')
# 创建课程表
cursor.execute('''
CREATE TABLE IF NOT EXISTS courses (
course_id TEXT PRIMARY KEY,
course_name TEXT,
credit REAL,
instructor TEXT
)
''')
conn.commit()
conn.close()

小李:这代码看起来没问题,不过你是不是应该考虑使用ORM来简化数据库操作?比如SQLAlchemy?
小明:嗯,我现在用的是原生的SQLite,主要是为了简单,如果以后要扩展的话,再考虑用ORM。
2. Flask应用结构
接下来是Flask应用的结构,我将所有的视图函数放在app.py中。
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
def get_db_connection():
conn = sqlite3.connect('student.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/')
def index():
conn = get_db_connection()
students = conn.execute('SELECT * FROM students').fetchall()
conn.close()
return render_template('index.html', students=students)
@app.route('/add_student', methods=['POST'])
def add_student():
student_id = request.form['student_id']
name = request.form['name']
gender = request.form['gender']
major = request.form['major']
advisor = request.form['advisor']
conn = get_db_connection()
conn.execute('INSERT INTO students (student_id, name, gender, major, advisor) VALUES (?, ?, ?, ?, ?)',
(student_id, name, gender, major, advisor))
conn.commit()
conn.close()
return redirect(url_for('index'))
@app.route('/delete_student/')
def delete_student(id):
conn = get_db_connection()
conn.execute('DELETE FROM students WHERE id = ?', (id,))
conn.commit()
conn.close()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
小李:这段代码看起来很清晰,但你觉得这样的结构是否容易维护?如果以后有更多功能,会不会变得复杂?
小明:确实,现在只是一个简单的例子。如果以后要增加更多功能,比如查询、修改、课程管理等,我会考虑模块化代码,把不同的功能分开。
3. 前端页面
我使用了一个简单的HTML模板来显示学生信息,并提供添加学生的表单。
研究生管理系统
研究生信息列表
{% for student in students %}
- {{ student.name }} - {{ student.student_id }}
{% endfor %}
添加新学生
小李:这个页面很简单,但你有没有考虑过用JavaScript来增强用户体验?比如动态加载数据?
小明:目前只是基础版本,后续可能会加入AJAX请求,实现无刷新更新页面。
4. 系统演示
运行应用后,访问 http://localhost:5000,可以看到学生信息列表。点击“添加新学生”按钮,填写表单并提交,即可看到新增的学生信息。
小李:这样看起来已经是一个完整的系统了,虽然功能还比较简单,但具备了基本的CRUD操作。
小明:是的,这只是第一步。接下来我打算加入课程管理、成绩录入等功能,让系统更完善。
小李:那你可以考虑使用Flask-Login来实现用户登录功能,这样系统会更安全。
小明:嗯,这是一个好建议,我之后会研究一下如何集成用户认证。
5. 总结
通过这次项目,我学习到了如何使用Python和Flask搭建一个简单的研究生管理信息系统。从数据库设计到Web开发,每一步都让我对全栈开发有了更深的理解。
小李:看来你已经掌握了基本的开发流程。希望你能继续完善这个系统,让它成为一个实用的工具。
小明:谢谢你的建议!我会继续努力的。
