Flask自定義命令
一、老版Flask自定義命令
Flask 1.x 和 2.x 版本
在Flask的老版本中,可以通過 flask-script
擴展來添加自定義命令。
-
安裝所需庫:
pip3 install Flask-Script==2.0.3 pip3 install flask==1.1.4 pip3 install markupsafe=1.1.1
-
在 Flask 應用中創建一個
Manager
對象,并使用裝飾器定義自定義命令:from flask_script import Manager manager = Manager(app)@manager.command def custom(arg):print(arg)
-
運行自定義命令:
python manage.py custom 123
二、Flask 新版本(2.x 及以后)
Flask 新版本通過內置的 click
模塊支持自定義命令,不再需要 flask-script
:
-
使用
click
裝飾器定義命令:from flask import Flask import clickapp = Flask(__name__)@app.cli.command("create-user") @click.argument("name") def create_user(name):print(name)
-
運行自定義命令:
flask --app 文件名:app create-user bruce
如果你的腳本文件名為
app.py
,則可以簡化命令為:flask create-user lqz
三、flask自定義命令示例
-
要求:制定一個flask命令,導入一個excel,把數據同步到 user表中
-
代碼示例
-
from flask import Flask, current_app import click import pymysql from openpyxl import load_workbookapp = Flask(__name__)@app.cli.command("import_excel") @click.argument("excel_path") def import_excel(excel_path):"""將指定路徑的 Excel 文件數據導入到 user 表中"""# 加載 Excel 文件workbook = load_workbook(filename=excel_path)sheet = workbook.active# 連接數據庫connection = pymysql.connect(host='localhost',port=3306,user='root',password='000',database='test',cursorclass=pymysql.cursors.DictCursor)try:with connection.cursor() as cursor:for row in sheet.iter_rows(min_row=2, values_only=True): # 假設第一行為表頭# 構造插入語句,假設 Excel 文件中有 'user'sql = "INSERT INTO user (name) VALUES (%s)"cursor.execute(sql, row)connection.commit()finally:connection.close()print(f"Excel 數據導入完成,文件:{excel_path}")if __name__ == '__main__':app.run()
-
四、Django自定義命令
Django允許在應用中創建自定義命令,步驟如下:
-
在應用目錄下創建
management/commands
文件夾結構。 -
在
commands
文件夾中創建一個新的 Python 文件,該文件的名字將是你的命令名稱。 -
在該文件中編寫自定義命令的代碼,繼承
BaseCommand
類:from django.core.management.base import BaseCommandclass Command(BaseCommand):help = '命令提示'def add_arguments(self, parser):parser.add_argument('path', nargs='*', type=str)def handle(self, *args, **kwargs):print('開始導入')print(args)print(kwargs)
-
使用自定義命令:
python manage.py 文件名