刚入门 Flask,来跟我一起学习吧

微框架

众所周知,Flask 是个微框架,究竟能微到什么程度呢?

官方给出了解释:

“微”(micro)并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以),也不意味着 Flask 在功能上有所欠缺。

微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。

Flask 不会替你做出太多决策——比如使用何种数据库。

而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。

除此之外的一切都由可由你掌握。

一个最小的 Flask 应用

from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)

把它保存为hello.py (或是类似的),然后用 python 解释器来运行

确保应用文件名不是 flask.py,因为这将与 Flask 本身冲突

$ python hello.py
 * Running on http://127.0.0.1:5000/

现在访问 http://127.0.0.1:5000/,就可以看到亲切的 Hello World

代码做了什么

  1. 首先,导入了 Flask 类。这个类的实例将会是 WSGI 应用程序。
  2. 接下来,创建一个该类的实例,第一个参数是应用模块或者包的名称。如果使用单一的模块(如本例),应该使用 __name__,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同(也即是 '__main__' 或实际的导入名)。这是必须的,这样 Flask 才知道到哪里去找模板、静态文件等等。
  3. 然后,使用 route() 装饰器告诉 Flask 什么样的 URL 能触发我们的函数。
  4. 这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。
  5. 最后我们用 run() 函数来让应用运行在本地服务器上。

其中 if __name__ == "__main__": 确保服务器只会在该脚本被 python 解释器直接执行的时候才会运行,而不是作为模块导入的时候

欲关闭服务器,按 Ctrl+C

注意

尽管交互式调试器允许 fork 的环境中无法正常使用(也即在生产服务器上正常使用几乎是不可能的),但它依然允许执行任意代码

这使它成为一个巨大的安全隐患,因此它绝对不能用于生产环境