一个最小的 Flask 应用

一个最小的 Flask 应用如下:

  1. from flask import Flask
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def hello_world():
  5. return 'Hello, World!'

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

  1. 首先我们导入了 Flask 类。 该类的实例将会成为我们的 WSGI 应用。
  2. 接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用 __name__ ,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘main’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。`
  3. 然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。> 它告诉应用程序哪个URL应该调用相关的函数。
    1. app.route(rule, options)
    • rule 参数表示与该函数的URL绑定。
    • options 是要转发给基础Rule对象的参数列表。

    在上面的示例中,’/ ‘ URL与hello_world()函数绑定。因此,当在浏览器中打开web服务器的主页时,将呈现该函数的输出。 最后,Flask类的run()方法在本地开发服务器上运行应用程序。

    1. 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执行的。

  1. Python Hello.py

Python shell中的消息通知您:

  1. * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

在浏览器中打开上述URL(localhost:5000)。将显示“Hello World”消息。

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

调试模式

通过调用run()方法启动Flask应用程序。但是,当应用程序正在开发中时,应该为代码中的每个更改手动重新启动它。为避免这种不便,请启用调试支持。如果代码更改,服务器将自行重新加载。它还将提供一个有用的调试器来跟踪应用程序中的错误(如果有的话)。

在运行或将调试参数传递给run()方法之前,通过将application对象的debug属性设置为True来启用Debug模式

  1. app.debug = True
  2. app.run()
  3. app.run(debug = True)

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

  1. $ export FLASK_ENV=development
  2. $ flask run

(在 Windows 下需要使用 set 来代替 export 。)

这样可以实现以下功能:

  1. 激活调试器。
  2. 激活自动重载。
  3. 打开 Flask 应用的调试模式。

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

外部可见的服务器

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

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

  1. $ flask run --host=0.0.0.0

这行代码告诉你的操作系统监听所有公开的 IP 。

Attention

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

运行中的调试器截图:

flask框架基础知识-Flask应用-Flask应用 - 图1