zoukankan      html  css  js  c++  java
  • Flask内置命令行工具—CLI

    应用发现

    flask命令在Flask库安装后可使用,使用前需要正确配置FLASK_APP环境变量以告知用户程序所在位置。不同平台设置方式有所不同。

    Unix Bash (Linux, Mac, etc.):

    
    $ export FLASK_APP=hello
    $ flask run
    

    Windows CMD:

    
    > set FLASK_APP=hello
    > flask run
    

    Windows PowerShell:

    
    > $env:FLASK_APP="hello"
    > flask run
    

    FLASK_APP环境变量分三部分:一个设置当前工作目录的可选路径,一个python文件或带"."的导入路径,一个可选的应用实例或工厂函数变量名。如果是工厂函数,可以后跟括号传入要接收的参数。

    FLASK_APP=src/hello
    设置src为当前工作目录,并导入hello

    FLASK_APP=hello.web
    导入hello.web

    FLASK_APP=hello:app2
    使用hello中的app2实例

    FLASK_APP=hello:create_app('dev')
    使用hello中的工厂函数create_app并传入参数dev

    如果未设置FLASK_APP,flask命令会查找wsgi.pyapp.py文件并探测应用实例或工厂函数。flask命令在给定的导入内寻找一个名为app或者application的应用实例,如果找不到会继续寻找任意应用实例。如果找不到任何实例,会接着寻找名为create_app或者make_app的工厂函数,使用该函数返回的实例。

    flask run

    运行开发服务器。不消说,不要在生产环境使用

    flask shell

    开启一个交互式的python shell,用来访问或处理应用数据。该指令默认激活应用上下文,并导入应用实例。

    只有应用实例是默认导入的,如果需要导入其他对象,使用shell_context_processor装饰函数,返回一个字典对象,键值对表示额外导入的对象。

    
    from exts import db, models
    
    @app.shell_context_processor
    def make_shell_context():
        return dict(models=models, db=db)
    

    flask db

    执行数据库迁移相关操作。flask db指令不能直接使用,需要获取Migrate实例。

    
    from flask_migrate import Migrate
    
    migrate = Migrate(app, db)
    

    环境

    通过FLASK_ENV变量设置Flask应用的运行环境。可选值包括production(默认)和development
    如果设置为development,flask命令将激活debug模式,执行flask run会启用交互式调试器和代码自动重载。

    DEBUG模式

    设置FLASK_ENV为development时,会自动激活debug模式。也可以通过FLASK_DEBUG变量单独控制,1表示启用,0表示禁用

    通过dotenv设置环境变量

    通过virtualenv设置环境变量

    自定义命令

    flask命令基于Click库实现。
    下列代码演示添加带有name参数的print-user命令:

    
    import click
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.cli.command()
    @click.argument("name")
    def print_user(name):
        print("this is", name)
    

    运行方式:flask print-user root注意这里的指令是print-user,使用print_user会提示没有这个指令,除非显示地在app.cli.command()中传入"print_user"。

    下列代码演示了和上面相同的功能,但将打印用户的命令添加到了user命令组。命令组可用于管理多个相关的命令:

    
    import click
    from flask import Flask
    from flask.cli import AppGroup
    
    app = Flask(__name__)
    user_cli = AppGroup("user")
    
    @user_cli.command("print")
    @click.argument("name")
    def print_user(name):
        print("this is", name)
    
    app.cli.add_command(user_cli)
    

    运行方式:flask user print root

    要测试自定义命令,参考Testing CLI Commands

    应用上下文

    使用Flask应用的.cli.command()装饰器添加的命令在执行时自动推入应用上下文。

    如果使用Click的command()装饰器添加命令,执行时不会自动推入应用上下文,要想达到同样的效果,增加with_appcontext装饰器:

    
    import click
    from flask import Flask, current_app
    from flask.cli import with_appcontext
    
    app = Flask(__name__)
    
    @click.command()
    @with_appcontext
    def do_work():
        print("do work")
        print(current_app)
    
    app.cli.add_command(do_work)
    

    如果命令不需要在应用上下文中执行,可以显示地禁用:

    
    @app.cli.command(with_appcontext=False)
    def do_work():
        pass
    

    插件

    略(在setup.py中配置entry_points->flask.commands的值)

    自定义脚本

    略(针对使用工厂函数生成应用实例的情况,在setup.py中配置entry_points->console_scripts的值)

    PyCharm 集成

    来源:https://segmentfault.com/a/1190000017436977

  • 相关阅读:
    The bean 'xxx' could not be injected as a 'xxx'because it is a JDK dynamic proxy that implements
    JQuery对象选择详细说明
    C#将image中的显示的图片转换成二进制
    选择一个图片文件,并且用PictureBox表示在Form上
    Android推送方案分析(MQTT/XMPP/GCM)
    [转载]什么是 Design Hackathon?
    脚本启动MySql服务
    Mysql数据库插入数据乱码问题,解决方案!
    MySQL自动备份脚本
    读取Excel模板,写入数据,并别输出另存为Excel文件
  • 原文地址:https://www.cnblogs.com/qixidi/p/10160593.html
Copyright © 2011-2022 走看看