django、flask自定义命令
一、django自定义命令
在 Django 中,自定义管理命令可以帮助你扩展 manage.py
命令的功能。
可以创建自己的命令来执行项目特定的任务,如初始化、清理数据库、发送批量电子邮件、调试帮助工具。
1、创建管理命令目录
在 Django 应用程序中创建一个名为 management
的目录,然后在其中创建一个 commands
目录。整个目录结构如下:
your_app/ management/ __init__.py commands/ __init__.py your_command.py
2、创建自定义命令文件
在 commands
目录中添加一个 Python 文件,这个文件名将成为你的命令名。例如,your_command.py
文件将创建一个名为 your_command
的命令。
3、编写命令逻辑
在 your_command.py
中,编写自定义命令的逻辑。你需要继承 BaseCommand
类,并实现 handle
方法。
from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): help = '描述这个命令的功能' def add_arguments(self, parser): # 如果需要参数,可以在这里定义 parser.add_argument('argument_name', type=str, help='描述这个参数的功能') def handle(self, *args, **options): # 取得参数的值 argument_value = options['argument_name'] # 执行命令逻辑 self.stdout.write(self.style.SUCCESS(f'成功执行命令,参数值为:{argument_value}'))
4、运行自定义命令
启动你的 Django 项目并运行自定义命令
python manage.py your_command <argument>
在这里,<argument>
是通过 add_arguments
方法定义的参数。
注意:
- 帮助文本:
help
属性为你的命令提供简单的描述。当运行python manage.py help your_command
时,会显示这些帮助信息。 - 错误处理:可以通过抛出
CommandError
来优雅地处理错误。 - 日志输出:使用
self.stdout.write
和self.stderr.write
来输出普通消息和错误消息。
二、flask自定义命令click
1、使用 @app.cli.command()
装饰器
from flask import Flask import click app = Flask(__name__) app.debug = True ## 2 自定制名 @app.cli.command("create-user") @click.argument("username") def create_user(username): """ 该命令用于创建一个用户,参数跟上用户名,如:\n flask --app CustomCommand.py:app create-user zjz """ click.echo('打印传入用户的名字...') print(f"User name is: {username}") @app.route('/') def index(): return 'index' if __name__ == '__main__': app.run(port=8888)
注:
1.1、""" """ 三引号里面的内容用户--help 提示消息
flask --app CustomCommand.py:app create-user --help
Usage: flask create-user [OPTIONS] USERNAME 该命令用于创建一个用户,参数跟上用户名,如: flask --app CustomCommand.py:app create-user zjz Options: --help Show this message and exit.
1.2、解释
- **@app.cli.command("create-user")**:注册一个名为
create-user
的命令。 - **@click.argument("name")**:定义这个命令需要一个位置参数
name
。 - Docstring:在函数
create_user
的顶部,提供一个简洁的描述,Click 将使用这段文字作为--help
输出中的说明部分。 - click.echo:用来替代
print
,这是因为click.echo
可以处理更多复杂的格式输出,更适合 CLI 环境下的字符输出。
1.3、创建多条自定义命令
# 继续加装饰器和函数,如: @app.cli.command("delete-user") @click.argument("username") def delete_user(username): """ This command is used to delete a user. Usage: flask --app CustomCommand.py:app delete-user <username> """ click.echo('Deleting user...') print(f"User deleted with name: {username}")
2、命令行缩写形式
当要执行的文件名为app时候可以缩写成
flask create-user --help
3、以蓝图注册定制命令
from flask import Blueprint bp = Blueprint('students', __name__) @bp.cli.command('create') @click.argument('name') def create(name): ... app.register_blueprint(bp)
以蓝图名执行命令
flask students create alice