Flask自定义命令
一、老版Flask自定义命令
Flask 1.x 和 2.x 版本
在Flask的老版本中,可以通过 flask-script
扩展来添加自定义命令。
-
安装所需库:
pythonpip3 install Flask-Script==2.0.3 pip3 install flask==1.1.4 pip3 install markupsafe=1.1.1
-
在 Flask 应用中创建一个
Manager
对象,并使用装饰器定义自定义命令:pythonfrom flask_script import Manager manager = Manager(app) @manager.command def custom(arg): print(arg)
-
运行自定义命令:
pythonpython manage.py custom 123
二、Flask 新版本(2.x 及以后)
Flask 新版本通过内置的 click
模块支持自定义命令,不再需要 flask-script
:
-
使用
click
装饰器定义命令:pythonfrom flask import Flask import click app = Flask(__name__) @app.cli.command("create-user") @click.argument("name") def create_user(name): print(name)
-
运行自定义命令:
pythonflask --app 文件名:app create-user bruce
如果你的脚本文件名为
app.py
,则可以简化命令为:pythonflask create-user lqz
三、flask自定义命令示例
-
要求:制定一个flask命令,导入一个excel,把数据同步到 user表中
-
代码示例
-
python
from flask import Flask, current_app import click import pymysql from openpyxl import load_workbook app = 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
类:pythonfrom django.core.management.base import BaseCommand class 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)
-
使用自定义命令:
pythonpython manage.py 文件名