60·模块十三:Web开发基础进阶

Web开发入门:Flask 框架简介

web-developmentflaskweb-framework

第 60 课:Web开发入门:Flask 框架简介

1. 学习目标

  • 理解 什么是 Flask,以及它在 Python Web 开发中的定位。
  • 掌握 Flask 应用的基本结构和核心组件(路由、视图函数)。
  • 能够 独立创建并运行一个简单的 Flask "Hello World" Web 应用。
  • 了解 HTTP 请求-响应的基本流程在 Flask 中是如何体现的。
  • 后续学习 Flask 的路由、模板和更高级功能打下坚实基础。

2. 核心概念

什么是 Flask?

想象一下,你想盖一座房子。Python 是你的砖块和水泥,而 Flask 就是一套精良的施工蓝图和工具。它不会预先给你一座复杂的宫殿(像 Django 那样"全家桶"框架),而是给你最核心、最灵活的工具,让你根据自己的想法自由搭建。Flask 被称为 "微框架",这里的"微"不是指功能弱,而是指它的核心非常简单、轻量,但同时可以通过丰富的扩展(extensions)来增加数据库集成、表单验证、用户认证等任何你需要的功能。

为什么选择 Flask?

  • 简单轻量:入门门槛低,代码直观,非常适合初学者理解 Web 开发的核心概念。
  • 灵活性强:不强制使用特定的项目结构或组件,你可以自由选择。
  • 强大的生态系统:拥有海量的第三方扩展。
  • 被广泛应用:许多知名公司(如 Netflix、Reddit、LinkedIn)的部分服务都使用 Flask 构建。

Web 应用的基本工作原理

一个 Web 应用,本质上是一个运行在服务器上的程序,它等待并响应来自客户端(如浏览器)的请求。

  1. 用户在浏览器输入网址(例如 http://127.0.0.1:5000/)。
  2. 浏览器向你的 Flask 应用(服务器)发送一个 HTTP 请求(比如 GET 请求)。
  3. Flask 应用根据请求的 URL 路径,找到对应的处理函数(视图函数)。
  4. 视图函数执行逻辑(比如查询数据库),并生成要返回的内容(比如一段 HTML 文本)。
  5. Flask 应用将这段内容封装成一个 HTTP 响应,发送回浏览器。
  6. 浏览器收到响应并渲染,用户看到页面内容。

Flask 的核心就是帮助我们优雅地处理这个过程:路由将 URL 映射到函数,视图函数负责生成响应。

3. 代码示例

下面是一个完整的、可以立即运行的 Flask "Hello World" 应用。

# 1. 导入 Flask 类
from flask import Flask

# 2. 创建 Flask 应用实例
# __name__ 是一个特殊变量,Flask 用它来定位资源(如模板、静态文件)
app = Flask(__name__)

# 3. 定义路由和视图函数
# 使用 @app.route() 装饰器将 URL '/' 关联到下面的 hello_world 函数
@app.route('/')
def hello_world():
    """这是视图函数。当用户访问根目录时,这个函数会被调用。"""
    # 它返回的内容就是用户在浏览器中看到的内容
    return '<h1>Hello, World!</h1><p>欢迎来到我的第一个 Flask 应用!</p>'

# 4. 启动应用
if __name__ == '__main__':
    # app.run() 启动 Flask 内置的开发服务器
    # debug=True 会在代码修改后自动重启服务器,并显示详细错误信息(开发时使用)
    # host='0.0.0.0' 让服务器对外部可见(在同一局域网内可以通过你的IP访问)
    # port=5000 指定端口号
    app.run(debug=True, host='0.0.0.0', port=5000)

如何运行和查看结果:

  1. 确保已安装 Flask。在终端或命令行中运行:pip install flask
  2. 将上面的代码保存为 app.py
  3. 在终端运行:python app.py
  4. 你会看到类似 Running on http://127.0.0.1:5000/ 的输出。
  5. 打开浏览器,访问 http://127.0.0.1:5000/http://localhost:5000/,你将看到"Hello, World!"页面。

代码解读:

  • from flask import Flask: 从 flask 包中导入 Flask 类。
  • app = Flask(__name__): 创建一个 Flask 应用的实例。这是整个应用的起点。
  • @app.route('/'): 这是一个装饰器,它告诉 Flask,当用户访问网站根目录(/)时,执行紧随其后的函数。
  • def hello_world():: 这个函数称为视图函数。它的返回值就是浏览器看到的页面内容。
  • app.run(...): 启动 Flask 的开发服务器,开始监听请求。

4. 实践练习

练习 1:添加新页面

在现有应用中,添加一个新的路由 /about,当用户访问时,返回一段关于你自己的介绍文字。

要求:

  1. app.py 中添加一个新的视图函数和对应的路由。
  2. 函数可以命名为 about()
  3. 返回包含至少一个 <h2> 标题和一个 <p> 段落的 HTML 字符串。

预期输出: 访问 http://localhost:5000/about 应该显示你定义的介绍信息。

练习 2:动态路由

创建一个路由 /hello/<name>,当用户访问 /hello/Alice 时,页面显示 你好, Alice! 欢迎来到Flask世界。

要求:

  1. 使用 Flask 的路由变量功能 <name> 来捕获 URL 中的动态部分。
  2. 在视图函数中接收这个 name 参数,并将其插入到返回的字符串中。
  3. 试试访问不同的名字,如 /hello/Bob,看看效果。

预期输出: 访问 /hello/Charlie 应该显示:你好, Charlie! 欢迎来到Flask世界。

练习 3:简单的 JSON API

创建一个路由 /api/status,返回一个 JSON 格式的数据,例如 {"status": "running", "message": "服务正常"}

要求:

  1. flask 中导入 jsonify 函数。
  2. 视图函数 status() 使用 jsonify() 函数来创建一个 JSON 响应。
  3. 访问该 URL,检查浏览器或使用开发者工具查看返回的数据类型。

预期输出: 访问 /api/status 应该返回一个 JSON 对象,而非 HTML 页面。

5. 常见错误

  1. 忘记安装 Flask:运行时出现 ModuleNotFoundError: No module named 'flask'
    • 解决:在终端执行 pip install flask
  2. 路由路径错误:访问页面时返回 404 Not Found
    • 解决:检查 @app.route() 中的路径是否正确,注意开头的 /
  3. 视图函数没有返回值:访问页面时出现服务器错误或空白。
    • 解决:确保每个视图函数都有 return 语句,返回一个字符串或响应对象。
  4. 端口冲突:启动时提示端口已被占用。
    • 解决:关闭占用该端口的程序,或者在 app.run() 中更改端口号,如 port=5001
  5. 修改代码后无变化:在开发服务器中修改了代码,但刷新浏览器页面内容没变。
    • 解决:确保在 app.run() 中设置了 debug=True,它会自动监测代码变化并重启服务器。如果没有开启,则需要手动在终端停止(Ctrl+C)并重启服务器。

6. 小结

  • Flask 是一个用 Python 编写的轻量级、灵活的 Web 微框架,非常适合入门和快速开发。
  • 核心概念是 路由@app.route)和 视图函数。路由将 URL 绑定到函数,视图函数处理请求并返回响应。
  • 一个最简单的 Flask 应用只需要几行代码:导入、实例化、定义路由、运行。
  • 使用 app.run() 启动 Flask 的开发服务器,通过浏览器访问 localhost:端口号 来测试。
  • 从"Hello World"开始,你已经迈出了 Web 开发的第一步。下一节课,我们将深入学习 Flask 强大的 路由 系统和 模板 引擎,来构建更动态、更美观的网页。

练习编辑器

python
Loading...

继续学习

完成本课后,建议继续学习下一课「Flask 路由、视图与模板」 以巩固所学知识。