校友管理系统与Python的结合实践
小明:最近我在学习Python,听说可以用来做系统开发,比如校友管理系统?
小李:对啊,Python确实很适合做这种项目。尤其是像校友管理系统这种需要数据存储和展示的系统。
小明:那具体怎么开始呢?我有点懵。
小李:我们可以一步步来。首先,你需要明确系统的功能需求。比如,校友信息的添加、查询、修改和删除,还有可能需要登录功能。
小明:听起来不错。那数据库方面怎么处理?是不是要用到SQL?
小李:是的,你可以用SQLite或者MySQL这样的数据库。Python中有个库叫sqlite3,可以直接操作SQLite数据库。
小明:那我可以先创建一个数据库表,用来保存校友的信息吗?比如姓名、性别、毕业年份、联系方式这些字段。
小李:没错,这一步是关键。我们可以用SQL语句来创建表。例如:
CREATE TABLE alumni (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
gender TEXT,
graduation_year INTEGER,
contact_info TEXT
);
小明:这个SQL语句看起来挺简单的。那在Python中怎么执行呢?
小李:可以用sqlite3模块来连接数据库,并执行SQL语句。下面是一个简单的例子:
import sqlite3
conn = sqlite3.connect('alumni.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS alumni (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
gender TEXT,
graduation_year INTEGER,
contact_info TEXT
)
''')
conn.commit()
conn.close()
小明:哦,明白了。那接下来是不是要写一些函数,比如添加校友信息?
小李:对,你可以定义一个函数来插入数据。比如:
def add_alumni(name, gender, graduation_year, contact_info):
conn = sqlite3.connect('alumni.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO alumni (name, gender, graduation_year, contact_info) VALUES (?, ?, ?, ?)',
(name, gender, graduation_year, contact_info))
conn.commit()
conn.close()
小明:这样就可以把数据存进去了。那查询的话,应该怎么写?
小李:查询也很简单。比如你想查所有校友信息,可以写:
def get_all_alumni():
conn = sqlite3.connect('alumni.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM alumni')
results = cursor.fetchall()
conn.close()
return results
小明:那如果我要根据姓名来查找呢?
小李:可以写一个带参数的查询函数。比如:
def search_alumni_by_name(name):
conn = sqlite3.connect('alumni.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM alumni WHERE name LIKE ?', ('%' + name + '%',))
results = cursor.fetchall()
conn.close()
return results
小明:这个LIKE语句能支持模糊查询,挺方便的。
小李:没错。那接下来我们考虑做一个简单的Web界面,让用户可以通过网页来操作这个系统。
小明:怎么做呢?Python有没有现成的Web框架?
小李:当然有,比如Flask或者Django。对于简单的系统来说,Flask更轻量级,适合入门。
小明:那我们就用Flask吧。那我应该怎么搭建环境?
小李:首先,安装Flask:
pip install flask
然后创建一个简单的Flask应用。比如:
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
def get_db_connection():
conn = sqlite3.connect('alumni.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/')
def index():
conn = get_db_connection()
alumni = conn.execute('SELECT * FROM alumni').fetchall()
conn.close()
return render_template('index.html', alumni=alumni)
@app.route('/add', methods=['POST'])
def add():
name = request.form['name']
gender = request.form['gender']
graduation_year = request.form['graduation_year']
contact_info = request.form['contact_info']
conn = get_db_connection()
conn.execute('INSERT INTO alumni (name, gender, graduation_year, contact_info) VALUES (?, ?, ?, ?)',
(name, gender, graduation_year, contact_info))
conn.commit()
conn.close()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
小明:这段代码看起来不错。那模板文件该怎么写?
小李:你可以在templates目录下创建一个index.html文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>校友管理系统</title>
</head>
<body>
<h1>校友列表</h1>
<table border="1">
<tr>
<th>姓名</th>
<th>性别</th>
<th>毕业年份</th>
<th>联系方式</th>
</tr>
{% for alumni in alumni %}
<tr>
<td>{{ alumni.name }}</td>
<td>{{ alumni.gender }}</td>
<td>{{ alumni.graduation_year }}</td>
<td>{{ alumni.contact_info }}</td>
</tr>
{% endfor %}
</table>
<h2>添加校友</h2>
<form method="post">
姓名:<input type="text" name="name"><br>
性别:<input type="text" name="gender"><br>
毕业年份:<input type="number" name="graduation_year"><br>
联系方式:<input type="text" name="contact_info"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
小明:这样就完成了基本的页面显示和表单提交功能。
小李:是的。不过现在还缺少搜索功能,我们可以再加一个搜索接口。
小明:那怎么实现呢?
小李:可以在路由中添加一个搜索路径,比如:
@app.route('/search', methods=['GET'])
def search():
name = request.args.get('name')
conn = get_db_connection()
if name:
alumni = conn.execute('SELECT * FROM alumni WHERE name LIKE ?', ('%' + name + '%',)).fetchall()
else:
alumni = conn.execute('SELECT * FROM alumni').fetchall()
conn.close()
return render_template('index.html', alumni=alumni)
小明:这样用户就可以通过URL传入名字进行搜索了。
小李:没错。另外,还可以考虑增加编辑和删除功能,提升系统的实用性。
小明:那编辑功能应该怎么实现呢?
小李:可以添加一个编辑页面,通过ID来获取数据并更新。比如:
@app.route('/edit/
def edit(id):
conn = get_db_connection()
if request.method == 'POST':
name = request.form['name']
gender = request.form['gender']
graduation_year = request.form['graduation_year']

contact_info = request.form['contact_info']
conn.execute('UPDATE alumni SET name=?, gender=?, graduation_year=?, contact_info=? WHERE id=?',
(name, gender, graduation_year, contact_info, id))
conn.commit()
conn.close()
return redirect(url_for('index'))
else:
alumni = conn.execute('SELECT * FROM alumni WHERE id=?', (id,)).fetchone()
conn.close()
return render_template('edit.html', alumni=alumni)
小明:那对应的模板文件该怎么写?
小李:创建一个edit.html文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>编辑校友信息</title>
</head>
<body>
<h1>编辑校友信息</h1>
<form method="post">
姓名:<input type="text" name="name" value="{{ alumni.name }}"><br>
性别:<input type="text" name="gender" value="{{ alumni.gender }}"><br>
毕业年份:<input type="number" name="graduation_year" value="{{ alumni.graduation_year }}"><br>
联系方式:<input type="text" name="contact_info" value="{{ alumni.contact_info }}"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
小明:这样就完成了编辑功能。
小李:是的。最后,我们还可以添加删除功能,比如:
@app.route('/delete/
def delete(id):
conn = get_db_connection()
conn.execute('DELETE FROM alumni WHERE id=?', (id,))
conn.commit()
conn.close()
return redirect(url_for('index'))
小明:这样整个系统的基本功能就都实现了。
小李:没错。虽然这只是个简单的版本,但已经具备了校友管理的核心功能。如果你有兴趣,还可以进一步扩展,比如加入用户登录、权限管理、导出数据等功能。
小明:看来Python真的很强大,能够快速开发出一个实用的系统。
小李:是的,Python的简洁性和丰富的库支持让它成为开发中小型系统的首选语言。
小明:谢谢你,今天学到了很多东西。
小李:不客气,以后有问题随时问我。
本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!

