欢迎访问宙启技术站
智能推送

Flask中使用MethodView()实现数据库增删改查操作

发布时间:2024-01-19 04:50:48

在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方法,我们可以实现不同的操作,并对请求和响应进行适当的处理。