现在位置: 首页 > Flask 教程 > 正文

Flask 第一个应用

上一章节我们已经成功安装了 Flask,接下来我们可以创建一个简单的 Flask 应用。

首先,创建一个名为 app.py 的文件,并添加以下内容:

实例( app.py )

from flask import Flask

app = Flask(__name__)

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

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

在命令行中运行 Flask 应用:

python app.py

你会看到 Flask 开发服务器启动,并显示类似于以下内容:

...
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 977-918-914
...

打开浏览器,访问 http://127.0.0.1:5000/,应该会看到 "Hello, World!" 的消息,表示 Flask 已成功安装并运行。

千万不要把文件名取为 flask.py,这会和 Flask 库本身冲突,导致导入错误。

代码解析:

  • from flask import Flask: 这行代码从 flask 模块中导入了 Flask 类。Flask 类是 Flask 框架的核心,用于创建 Flask 应用程序实例。

  • app = Flask(__name__): 这行代码创建了一个 Flask 应用实例。__name__ 是一个特殊的 Python 变量,它在模块被直接运行时是 '__main__',在被其他模块导入时是模块的名字。传递 __name__Flask 构造函数允许 Flask 应用找到和加载配置文件。

  • @app.route('/'): 这是一个装饰器,用于告诉 Flask 哪个 URL 应该触发下面的函数。在这个例子中,它指定了根 URL(即网站的主页)。

  • def hello_world():: 这是定义了一个名为 hello_world 的函数,它将被调用当用户访问根URL时。

  • return 'Hello, World!': 这行代码是 hello_world 函数的返回值。当用户访问根 URL 时,这个字符串将被发送回用户的浏览器。

  • if __name__ == '__main__'::这行代码是一个条件判断,用于检查这个模块是否被直接运行,而不是被其他模块导入。如果是直接运行,下面的代码块将被执行。

  • app.run(debug=True):这行代码调用 Flask 应用实例的 run 方法,启动 Flask 内置的开发服务器。debug=True 参数会启动调试模式,这意味着应用会在代码改变时自动重新加载,并且在发生错误时提供一个调试器。

如果你安装了 python-dotenv,可以在项目目录创建 .flaskenv 文件,简化命令:

# 文件路径:.flaskenv
FLASK_APP=app
FLASK_DEBUG=True

配置后,直接运行 flask run 即可,无需每次指定 --app 参数:

(.venv) $ flask run
 * Serving Flask app 'app'
 * Debug mode: on
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

如果你把文件命名为 app.pywsgi.py,Flask 能自动发现它,连 --app 都可以省略。但显式指定是一种好习惯。


Debug 模式

开发时建议开启 Debug 模式,它提供两个重要功能:

  • 自动重载:修改代码保存后,服务器自动重启,无需手动操作
  • 交互式调试器:当代码出错时,浏览器中会显示详细的错误信息和调用栈

开启方式:

(.venv) $ flask --app app run --debug
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 123-456-789

安全警告:Debug 模式下的交互式调试器允许在浏览器中执行任意 Python 代码。虽然它受 PIN 码保护,但 绝对不要在生产环境开启 Debug 模式


运行方式对比

除了 flask run 命令,你也会看到另一种运行方式:

实例

# 不推荐:在代码中调用 app.run()
if __name__ == "__main__":
    app.run(debug=True)

然后用 python app.py 运行。

运行方式 优点 缺点
flask run 支持命令行参数(--host, --port, --debug),配置灵活;自动加载 .flaskenv 需要记住命令参数
python app.py 简单直观 不灵活,调试模式需要改代码;Flask 官方不推荐

Flask 官方推荐使用 flask run 命令。如果你在代码中写了 app.run() 同时又用了 flask run,Flask 会智能地忽略 app.run() 调用并给出黄字提示。


为响应添加更多内容

视图函数不仅可以返回简单的字符串,还可以返回 HTML 内容:

实例

# 文件路径:app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    # 返回多行 HTML,Flask 会自动设置 Content-Type 为 text/html
    return """
    <h1>欢迎来到 RUNOOB Flask 教程</h1>
    <p>这是一个用 Flask 构建的 Web 应用。</p>
    <ul>
        <li>学习路由系统</li>
        <li>学习模板渲染</li>
        <li>学习数据库操作</li>
    </ul>
    """

访问 http://127.0.0.1:5000/,输出结果如下:

当然,在 Python 代码中直接写 HTML 很快就会变得难以维护,后续章节会介绍如何使用模板来分离 HTML 和 Python 代码。