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 方法的邏輯組織在一個類中,使程式碼更清晰。
- 易於擴充套件:可以透過繼承和組合來擴充套件類檢視的功能。