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

浙公网安备 33010602011771号