一个最小的 Flask 应用
一个最小的 Flask 应用如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
那么,这些代码是什么意思呢?
- 首先我们导入了
Flask
类。 该类的实例将会成为我们的 WSGI 应用。 - 接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用
__name__
,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘main’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。` - 然后我们使用
route()
装饰器来告诉 Flask 触发函数的 URL 。> 它告诉应用程序哪个URL应该调用相关的函数。app.route(rule, options)
- rule 参数表示与该函数的URL绑定。
- options 是要转发给基础Rule对象的参数列表。
在上面的示例中,’/ ‘ URL与hello_world()函数绑定。因此,当在浏览器中打开web服务器的主页时,将呈现该函数的输出。 最后,Flask类的run()方法在本地开发服务器上运行应用程序。
app.run(host, port, debug, options)
所有参数都是可选的
| 序号 | 参数与描述 | | —- | —- | | 1 | host 要监听的主机名。 默认为127.0.0.1(localhost)。设置为“0.0.0.0”以使服务器在外部可用 | | 2 | port 默认值为5000 | | 3 | debug 默认为false。 如果设置为true,则提供调试信息 | | 4 | options 要转发到底层的Werkzeug服务器。 |
上面给出的Python脚本是从Python shell执行的。
Python Hello.py
Python shell中的消息通知您:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
在浏览器中打开上述URL(localhost:5000)。将显示“Hello World”消息。
- 函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。
调试模式
通过调用run()方法启动Flask应用程序。但是,当应用程序正在开发中时,应该为代码中的每个更改手动重新启动它。为避免这种不便,请启用调试支持。如果代码更改,服务器将自行重新加载。它还将提供一个有用的调试器来跟踪应用程序中的错误(如果有的话)。
在运行或将调试参数传递给run()方法之前,通过将application对象的debug属性设置为True来启用Debug模式。
app.debug = True
app.run()
app.run(debug = True)
如果需要打开所有开发功能(包括调试模式),那么要在运行服务器之前导出 FLASK_ENV
环境变量并把其设置为 development
:
$ export FLASK_ENV=development
$ flask run
(在 Windows 下需要使用
set
来代替export
。)
这样可以实现以下功能:
- 激活调试器。
- 激活自动重载。
- 打开 Flask 应用的调试模式。
还可以通过导出 FLASK_DEBUG=1
来单独控制调试模式的开关。
外部可见的服务器
运行服务器后,会发现只有你自己的电脑可以使用服务,而网络中的其他电脑却 不行。缺省设置就是这样的,因为在调试模式下该应用的用户可以执行你电脑中 的任意 Python 代码。
如果你关闭了调试器或信任你网络中的用户,那么可以让服务器被公开访问。 只要在命令行上简单的加上 --host=0.0.0.0
即可:
$ flask run --host=0.0.0.0
这行代码告诉你的操作系统监听所有公开的 IP 。
Attention
虽然交互调试器不能在分布环境下工作(这使得它基本不可能用于生产环境),但是 它允许执行任意代码,这样会成为一个重大安全隐患。因此, 绝对不能在生产环境 中使用调试器 。
运行中的调试器截图: