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

  

 

posted @ 2024-11-13 15:29  凡人半睁眼  阅读(0)  评论(0编辑  收藏  举报