Flask 类视图
Flask 类视图
Flask的类视图是一种将视图逻辑组织成类的方式,而不是传统的函数视图。类视图可以更好地封装和复用代码
- 继承 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 方法的逻辑组织在一个类中,使代码更清晰。
- 易于扩展:可以通过继承和组合来扩展类视图的功能。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2023-11-29 yaml/json/ini 配置读取