人工智能 flask的调试

一个最小的应用
一个最小的 Flask 应用如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

那么,这些代码是什么意思呢?

首先我们导入了 Flask 类。 该类的实例将会成为我们的 WSGI 应用。

接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用 name ,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘main’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。更多内容详见 Flask 文档。

然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。

函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。

把它保存为 hello.py 或其他类似名称。请不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突。

可以使用 flask 命令或者 python 的 -m 开关来运行这个应用。在 运行应用之前,需要在终端里导出 FLASK_APP 环境变量:

$ export FLASK_APP=hello.py
$ flask run

  • Running on http://127.0.0.1:5000/
    如果是在 Windows 下,那么导出环境变量的语法取决于使用的是哪种命令行解释器。 在 Command Prompt 下:

C:\path\to\app>set FLASK_APP=hello.py
在 PowerShell 下:

PS C:\path\to\app> $env:FLASK_APP = “hello.py”
还可以使用 python -m flask:

$ export FLASK_APP=hello.py
$ python -m flask run

  • Running on http://127.0.0.1:5000/
    这样就启动了一个非常简单的内建的服务器。这个服务器用于测试应该是足够了,但是 用于生产可能是不够的。关于部署的有关内容参见《 部署方式 》。

现在在浏览器中打开 http://127.0.0.1:5000/ ,应该可以看到 Hello World! 字样。

外部可见的服务器
运行服务器后,会发现只有你自己的电脑可以使用服务,而网络中的其他电脑却 不行。缺省设置就是这样的,因为在调试模式下该应用的用户可以执行你电脑中 的任意 Python 代码。

如果你关闭了调试器或信任你网络中的用户,那么可以让服务器被公开访问。 只要在命令行上简单的加上 --host=0.0.0.0 即可:

$ flask run --host=0.0.0.0
这行代码告诉你的操作系统监听所有公开的 IP 。

如果服务器不能启动怎么办
假如运行 python -m flask 命令失败或者 flask 命令不存在, 那么可能会有多种原因导致失败。首先应该检查错误信息。

老版本的 Flask
版本低于 0.11 的 Flask ,启动应用的方式是不同的。简单的说就是 flask 和 python -m flask 命令都无法使用。在这种情况有 两个选择:一是升级 Flask 到更新的版本,二是参阅《 开发服务器 》,学习其他 启动服务器的方法。

非法导入名称
FLASK_APP 环境变量中储存的是模块的名称,运行 flask run 命令就 会导入这个模块。如果模块的名称不对,那么就会出现导入错误。出现错误的时机是在 应用开始的时候。如果调试模式打开的情况下,会在运行到应用开始的时候出现导入 错误。出错信息会告诉你尝试导入哪个模块时出错,为什么会出错。

最常见的错误是因为拼写错误而没有真正创建一个 app 对象。

调试模式
(只需要记录出错信息和追踪堆栈?参见 应用错误处理 )

虽然 flask 命令可以方便地启动一个本地开发服务器,但是每次应用代码 修改之后都需要手动重启服务器。这样不是很方便, Flask 可以做得更好。如果你打开 调试模式,那么服务器会在修改应用代码之后自动重启,并且当应用出错时还会提供一个 有用的调试器。

如果需要打开所有开发功能(包括调试模式),那么要在运行服务器之前导出 FLASK_ENV 环境变量并把其设置为 development:

$ export FLASK_ENV=development
$ flask run
(在 Windows 下需要使用 set 来代替 export 。)

这样可以实现以下功能:

激活调试器。

激活自动重载。

打开 Flask 应用的调试模式。

还可以通过导出 FLASK_DEBUG=1 来单独控制调试模式的开关。

开发服务器 文档中还有更多的参数说明。

Attention
虽然交互调试器不能在分布环境下工作(这使得它基本不可能用于生产环境),但是 它允许执行任意代码,这样会成为一个重大安全隐患。因此, 绝对不能在生产环境 中使用调试器 。

运行中的调试器截图:

screenshot of debugger in action

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值