Flask 类视图

Flask 类视图

Flask的类视图是一种将视图逻辑组织成类的方式,而不是传统的函数视图。类视图可以更好地封装和复用代码

  1. 继承 MethodView
  • MethodView是Flask提供的一个基类,用于定义类视图
  • 每个HTTP方法(如get\post\put\delete等)对应类中的一个方法
    2.方法对应HTTP请求
  • get 方法处理 GET 请求。
  • post 方法处理 POST 请求。
  • put 方法处理 PUT 请求。
  • delete 方法处理 DELETE 请求。

3.注册类视图

  • 使用 add_url_rule 方法将类视图注册到 Flask 应用中。
复制import json

from flask import Flask, jsonify, request
from flask_cors import CORS
from database import db,r
from sqlalchemy import text
from config import *
# 实例化flask对象
app = Flask(__name__)
# 配置转码
app.config['JSON_AS_ASCII'] = False
# 配置跨越
CORS(app, cors_allowed_origins="*")

# 配置mysql数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://{}:{}@{}:{}/{}'.format(mysql_user,mysql_password,mysql_host,mysql_port,mysql_db)
# 自动提交sql请求
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

# 初始化操作
db.init_app(app)

from flask.views import MethodView

# 父类
class BaseView(MethodView):

    def get_user(self):
        print('ok~')

class ManageApi(BaseView):
    # 查询
    def get(self):
        # 根据用户id进行查询

        id = request.args.get('id', None)
        if id is None:
            _sql = text("select email from user")
            userlist = db.session.execute(_sql).fetchall()
            data = [dict(row._mapping) for row in userlist]
        else:
            _sql = text("select email from `user` where id = :id")
            userlist = db.session.execute(_sql, {"id": id}).fetchall()
            self.get_user()
            data = [dict(row._mapping) for row in userlist]

        return jsonify({"data": data, "msg": "ok"})
    # 新增
    def post(self):
        data = request.get_json()
        db.session.execute(text("insert into user(email, password) values(:email, :password)"), data)
        db.session.commit()
        return jsonify({"msg": "success"})

    # 更新
    def put(self):
        data = request.get_json()
        db.session.execute(text("update user set email=:email,password=:password where id=:id"), data)
        db.session.commit()
        return jsonify({"msg": "success"})

    # 删除
    def delete(self):
        data = request.get_json()
        db.session.execute(text("delete from user where id=:id"),data)
        db.session.commit()
        return jsonify({"msg": "记录:id{}已删除".format(data['id'])})


# 注册路由
app.add_url_rule('/user/manageapi',view_func=ManageApi.as_view('ManageApi'))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

定义类视图:

  • UserAPI 继承自 MethodView。
  • get 方法处理 GET 请求,根据是否有 user_id 参数来决定返回所有用户还是特定用户。
  • post 方法处理 POST 请求,创建新用户。
  • put 方法处理 PUT 请求,更新用户信息。
  • delete 方法处理 DELETE 请求,删除用户。
  • 注册类视图:
  • user_view = UserAPI.as_view('user_api') 将 UserAPI 类转换为视图函数。
  • app.add_url_rule 方法将视图函数注册到指定的 URL 路径,并指定支持的 HTTP 方法。
  • 优点
  • 代码复用:类视图可以更好地封装和复用代码,减少重复代码。
  • 更好的组织结构:将不同 HTTP 方法的逻辑组织在一个类中,使代码更清晰。
  • 易于扩展:可以通过继承和组合来扩展类视图的功能。
posted @   乐乐乐乐乐乐樂  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2023-11-29 yaml/json/ini 配置读取
jQuery火箭图标返回顶部代码
点击右上角即可分享
微信分享提示