Flask中使用MethodView()实现数据库增删改查操作
在Flask中使用MethodView()可以更好地组织代码,将相关的请求处理逻辑封装在一个类里。下面我们以实现一个简单的学生信息管理系统为例,来演示如何使用MethodView()来实现数据库的增删改查操作。
首先,我们需要创建一个数据库来存储学生信息,我们可以使用SQLite数据库,创建一个students表来存储学生的id、姓名和年龄信息。然后,创建一个Flask应用,并导入所需的模块,如下所示:
from flask import Flask, jsonify, request from flask.views import MethodView import sqlite3
然后,我们创建一个继承自MethodView的类来处理学生信息的增删改查操作,代码如下所示:
class StudentAPI(MethodView):
def get(self, student_id=None):
if student_id is None:
# 查询所有学生信息
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM students")
students = cursor.fetchall()
conn.close()
return jsonify(students)
else:
# 查询指定学生信息
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM students WHERE id=?", (student_id,))
student = cursor.fetchone()
conn.close()
return jsonify(student)
def post(self):
# 添加学生信息
data = request.get_json()
name = data['name']
age = data['age']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO students (name, age) VALUES (?, ?)", (name, age))
conn.commit()
conn.close()
return jsonify(success=True)
def put(self, student_id):
# 更新学生信息
data = request.get_json()
name = data['name']
age = data['age']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("UPDATE students SET name=?, age=? WHERE id=?", (name, age, student_id))
conn.commit()
conn.close()
return jsonify(success=True)
def delete(self, student_id):
# 删除学生信息
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM students WHERE id=?", (student_id,))
conn.commit()
conn.close()
return jsonify(success=True)
上述代码中,我们在StudentAPI类中定义了get、post、put和delete四个方法,分别实现了查询学生信息(可一次查询所有学生或指定学生)、添加学生信息、更新学生信息和删除学生信息的功能。在get方法中,如果不传入学生id,则返回所有学生信息;如果传入学生id,则返回指定学生信息。在post、put和delete方法中,我们使用request.get_json()方法获取请求数据,并进行相应的数据库操作。
接下来,我们需要创建一个应用实例,并将StudentAPI类注册为视图函数,代码如下所示:
app = Flask(__name__)
student_view = StudentAPI.as_view('student_api')
app.add_url_rule('/students/', defaults={'student_id': None}, view_func=student_view, methods=['GET'])
app.add_url_rule('/students/', view_func=student_view, methods=['POST'])
app.add_url_rule('/students/<int:student_id>', view_func=student_view, methods=['GET', 'PUT', 'DELETE'])
上述代码中,我们使用add_url_rule()方法将/student/路由注册到StudentAPI类的方法上,并指定对应的HTTP方法。对于查询学生信息,我们采用了两种路由规则,即一种是不传入学生id,另一种是传入学生id。对于其他操作,我们使用了与传入学生id的规则。
最后,我们在main函数中启动Flask应用,代码如下所示:
if __name__ == '__main__':
app.run()
可以通过在终端中执行python文件来启动应用,然后通过浏览器或curl命令发送请求进行测试。以下是一些示例请求和响应:
1. 查询所有学生信息:GET /students/
响应:
[
[1, "Alice", 18],
[2, "Bob", 20],
...
]
2. 查询指定学生信息:GET /students/1
响应:
[1, "Alice", 18]
3. 添加学生信息:POST /students/
请求体:
{
"name": "Charlie",
"age": 22
}
响应:
{
"success": true
}
4. 更新学生信息:PUT /students/1
请求体:
{
"name": "Alex",
"age": 20
}
响应:
{
"success": true
}
5. 删除学生信息:DELETE /students/1
响应:
{
"success": true
}
综上所述,我们可以使用Flask中的MethodView()来实现数据库的增删改查操作,将相关的请求处理逻辑封装在同一个类中,提高代码的可读性和可维护性。通过合理设计路由规则和对应的HTTP方法,我们可以实现不同的操作,并对请求和响应进行适当的处理。
