Flask 類檢視

乐乐乐乐乐乐樂發表於2024-11-29

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

相關文章