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 文件名