资讯专栏INFORMATION COLUMN

Flask内置命令行工具—CLI

nicercode / 2303人阅读

摘要:如果设置为,命令将激活模式,执行会启用交互式调试器和代码自动重载。也可以通过变量多带带控制,表示启用,表示禁用通过设置环境变量略通过设置环境变量略自定义命令命令基于库实现。

应用发现

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://www.ucloud.cn/yun/42842.html

相关文章

  • 初见Flask

    摘要:接收用户请求并分析请求的。执行函数并生成响应,返回给浏览器。这个过程我们称为注册路由,路由负责管理和函数之间的映射,而这个函数则被称为视图函数。文件是一个名为的文本文件,它存储了项目中提交时的忽略文件规则清单。 flask简述 Flask 是一个基于 Python 开发并且依赖 jinja2 模板和 Werkzeug WSGI 服务的一个微型框架,对于 Werkzeug 本质是 Soc...

    tomorrowwu 评论0 收藏0
  • 手把手教你如何用Crawlab构建技术文章聚合平台(二)

    摘要:上一篇文章手把手教你如何用构建技术文章聚合平台一介绍了如何使用搭建的运行环境,并且将与集成,对掘金进行技术文章的抓取,最后可以查看抓取结果。本篇文章将继续讲解如何利用编写一个精简的聚合平台,将抓取好的文章内容展示出来。 上一篇文章《手把手教你如何用Crawlab构建技术文章聚合平台(一)》介绍了如何使用搭建Crawlab的运行环境,并且将Puppeteer与Crawlab集成,对掘金、...

    zhunjiee 评论0 收藏0
  • 一些 PyCharm 的使用和设置建议

    摘要:显示工具栏默认并不显示工具栏,在大多数工具栏都放了最常用的操作,你可以通过主菜单显示菜单栏来显示工具栏。工具栏显示出来后你还可以通过右键定制上面的按钮,我会把一些跟相关的操作放到上面,比如,,默认它只加了和。 PyCharm是我强烈推荐的Python IDE,如果你有EDU的邮箱可以直接申请专业版授权,或者就使用社区版,功能上并没有太多缩减,日常开发也完全够用。 如果是首次安装PyCh...

    Drinkey 评论0 收藏0
  • 腾讯IVWEB前端工程化工具feflow思考与实践

    摘要:本篇文章主要介绍腾讯团队从到在工程化的思考和实践。的全称是前端工作流,致力于提升研发效率和规范的工程化解决方案。最后腾讯团队的工程化解决方案已经开源主页如果对您的团队或者项目有帮助,请给个支持一下哈 showImg(https://segmentfault.com/img/remote/1460000013362603?w=1200&h=400); 本篇文章主要介绍腾讯IVWEB团队从...

    TANKING 评论0 收藏0
  • 精选50道Python面试题,快来看看你已经掌握了多少道吧

    摘要:从存储的字符串表示中检索原始对象的过程称为。这称为命名空间。如果需要八进制或十六进制表示,请使用内置函数或。和有什么区别返回对象,而返回列表,并使用相同的内存,无论范围大小是多少。它提供了灵活性,并允许开发人员为他们的项目使用正确的工具。 ...

    zzir 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<