昨天的文章寫了使用Flask框架實現(xiàn)基礎(chǔ)的增刪改查白对,通篇只是一個.py文件掠廓,看起來非常的簡單。
實際工作中甩恼,一個項目不可能就一個模塊蟀瞧,比如首頁、訂單条摸、我的等等悦污。如果全部寫在一個文件內(nèi),代碼會非常冗余且邏輯也不清晰屈溉,查找起來也不方便。所以進行模塊的拆分就非常有必要抬探。
這篇文章目的主要是實現(xiàn)接口定義的模塊化拆分和統(tǒng)一引入子巾,保證接口能正常進行調(diào)用。
下面就開始進入正題吧小压!
首先打開Pycharm线梗,假設(shè)你有以下文件結(jié)構(gòu):
企業(yè)微信截圖_17135041355032.png
在 _init_.py 中,創(chuàng)建Flask應(yīng)用實例怠益,并進行一些初始化操作:
# 需要用到的包引入
from pymysql import Connection
from flask import Flask
from flask_cors import CORS
conn = Connection(
host="localhost",
port=3306,
user="root",
password="123456",
autocommit=True
)
# 獲取游標(biāo)對象
cursor = conn.cursor()
# 選擇數(shù)據(jù)庫
conn.select_db("test")
# 后端服務(wù)啟動 新建Flask實例
app = Flask(__name__)
# 為所有路徑啟用CORS
CORS(app)
# 導(dǎo)入視圖模塊來注冊路由仪搔,. 符號用來表示當(dāng)前包的目錄;注意需要在app創(chuàng)建之后導(dǎo)入
# 可以根據(jù)自己項目需要拆分多個蜻牢,這里只演示兩個
from . import login
from . import student
在login.py中烤咧,定義路由和相應(yīng)的視圖函數(shù):
from flask import request, jsonify
from flask_moudle.route import app, cursor
# 登錄接口
@app.route("/login", methods=['POST'])
def login_student():
username = request.form.get("username")
password = request.form.get("password")
if not username or not password:
return jsonify({"message": "缺少必填參數(shù)"}), 400
query = "select * from user where username=%s and password=%s"
try:
cursor.execute(query, (username, password))
user_data = cursor.fetchone() # 獲取查詢結(jié)果的第一行
if user_data:
# 處理用戶數(shù)據(jù)
return jsonify({"message": f"學(xué)生{username}登錄成功"}), 200
else:
return jsonify({"message": "用戶名或密碼錯誤"}), 401
except Exception as e:
return jsonify({"message": str(e)}), 500
同理在student.py 也是定義了相關(guān)路由
from flask import request, jsonify
from flask_moudle.route import app, cursor
# 獲取列表數(shù)據(jù)
@app.route("/student/list", methods=['GET'])
def student_list():
# 獲取某個參數(shù)偏陪,例如 'name'
name = request.args.get('name')
# 構(gòu)造查詢語句
if name:
# 使用LIKE操作符和通配符%來查詢包含name的記錄
query = "select * from student where name like %s"
# 使用%%作為通配符%的轉(zhuǎn)義,因為%在SQL中是特殊字符
cursor.execute(query, ('%' + name + '%',))
else:
# 如果沒有name參數(shù)煮嫌,查詢所有記錄
query = "select * from student"
cursor.execute(query)
try:
# 獲取查詢結(jié)果
data = cursor.fetchall()
except Exception as e:
# 處理數(shù)據(jù)庫查詢異常
print(f"查詢異常: {e}")
return jsonify([]), 500
# 將結(jié)果轉(zhuǎn)換為字典列表
# 這段代碼使用了Python的列表推導(dǎo)式(list comprehension)來將一個數(shù)據(jù)庫查詢結(jié)果列表轉(zhuǎn)換為包含字典的列表
result = [
{
"id": row[0],
"name": row[1],
"age": row[2]
} for row in data
]
# 返回JSON響應(yīng)
return jsonify(result)
# 下面還有許多......
最后笛谦,在flask_app.py中,你可以導(dǎo)入app對象昌阿,并運行它:
from flask_moudle.route import app, conn
if __name__ == "__main__":
app.run("0.0.0.0", port=9090, debug=True)
# 關(guān)閉數(shù)據(jù)庫
conn.close()
最后我們來通過postman驗證一下接口是否可以正常訪問饥脑。
企業(yè)微信截圖_17135053336836.png
一切OK~
想分幾個模塊就分幾個,這樣的話就可以肆無忌憚的寫啦懦冰!