Python Flask 框架入门:从零搭建你的第一个 Web 应用

前言

在 Python 的 Web 开发生态中,Django 和 Flask 是最常被提及的两大框架。如果说 Django 是"大而全"的重型框架,那 Flask 就是典型的"微框架"(Microframework)------它核心简洁,只提供 Web 开发最基础的能力(路由、请求处理、模板渲染),其余功能(数据库、表单验证、用户认证等)都通过扩展(Extension)按需引入。

正因为这种"轻量、灵活、易上手"的特点,Flask 非常适合用来做小型项目、API 服务、原型验证,甚至是很多大型项目的技术选型(例如 Pinterest、Linkedin 的部分服务就使用了 Flask)。

本文将带你了解 Flask 的核心概念,并通过一个完整的小例子,让你在 10 分钟内跑起属于自己的第一个 Flask 应用。


一、Flask 是什么?

Flask 由 Armin Ronacher 开发,基于两个核心组件:

  • Werkzeug:一个 WSGI(Web Server Gateway Interface)工具库,负责底层的请求/响应处理。
  • Jinja2:一个功能强大的模板引擎,用于渲染 HTML 页面。

Flask 本身的代码量很小,它不会替你决定"应该用什么数据库""应该用什么方式做用户认证",这些都交给开发者自己选择,因此也被称为"约定优于配置"理念的反面------Flask 追求的是"配置优于约定",给开发者最大的自由度。

Flask 的主要特点

  • 轻量简洁:核心功能少而精,学习曲线平缓
  • 路由灵活:通过装饰器即可定义 URL 路由,代码直观
  • 内置开发服务器与调试器:开发阶段无需额外配置即可快速调试
  • 模板引擎支持:内置 Jinja2,方便渲染动态 HTML
  • 易于扩展:Flask-SQLAlchemy(数据库)、Flask-Login(用户认证)、Flask-RESTful(API 开发)等扩展生态成熟
  • RESTful 支持友好:非常适合用来快速搭建 API 服务

二、环境准备

在开始之前,确保你已经安装了 Python(建议 3.8 及以上版本)。

1. 创建虚拟环境(推荐)

使用虚拟环境可以避免不同项目之间的依赖冲突:

bash 复制代码
# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS / Linux:
source venv/bin/activate

2. 安装 Flask

bash 复制代码
pip install flask

安装完成后,可以通过以下命令查看版本,确认安装成功:

bash 复制代码
python -c "import flask; print(flask.__version__)"

三、动手实践:第一个 Flask 应用

1. 最小可运行示例

新建一个文件 app.py,写入以下代码:

python 复制代码
from flask import Flask

# 创建 Flask 应用实例
app = Flask(__name__)

# 定义路由:访问根路径时执行的函数
@app.route('/')
def hello_world():
    return '<h1>Hello, Flask!</h1><p>欢迎来到我的第一个 Flask 应用~</p>'

if __name__ == '__main__':
    # debug=True 表示开启调试模式,代码修改后会自动重启服务
    app.run(debug=True)

在终端运行:

bash 复制代码
python app.py

看到类似下面的输出就说明启动成功了:

复制代码
 * Serving Flask app 'app'
 * Debug mode: on
 * Running on http://127.0.0.1:5000

打开浏览器访问 http://127.0.0.1:5000,就能看到页面上显示 "Hello, Flask!" 了。

2. 进阶一点:动态路由 + 请求参数 + 简单模板

只有一个静态页面还不够有趣,我们来做一个稍微完整点的例子:一个可以传入姓名、并支持 GET 表单查询的问候页面。

项目结构:

复制代码
flask_demo/
├── app.py
└── templates/
    └── index.html

templates/index.html

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Flask 问候示例</title>
    <style>
        body { font-family: "Microsoft YaHei", sans-serif; max-width: 600px; margin: 60px auto; }
        input, button { font-size: 16px; padding: 6px 10px; }
        .greeting { color: #2c7be5; font-size: 20px; margin-top: 20px; }
    </style>
</head>
<body>
    <h2>👋 Flask 小小问候程序</h2>
    <form method="get" action="/greet">
        <input type="text" name="name" placeholder="请输入你的名字" required>
        <button type="submit">问候我</button>
    </form>

    {% if name %}
    <p class="greeting">你好,{{ name }}!现在是 {{ now }},欢迎学习 Flask 🎉</p>
    {% endif %}
</body>
</html>

app.py

python 复制代码
from datetime import datetime
from flask import Flask, render_template, request

app = Flask(__name__)


@app.route('/')
def index():
    # 渲染首页表单
    return render_template('index.html', name=None)


@app.route('/greet')
def greet():
    # 获取 URL 查询参数 ?name=xxx
    name = request.args.get('name', '').strip()
    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render_template('index.html', name=name, now=now)


@app.route('/api/greet/<username>')
def api_greet(username):
    # 动态路由示例,同时演示返回 JSON 数据(适合做 API 接口)
    return {
        'code': 0,
        'message': f'Hello, {username}!',
        'timestamp': datetime.now().isoformat()
    }


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

运行 python app.py 后,依次体验以下几种效果:

  1. 访问 http://127.0.0.1:5000/,可以看到一个输入框,输入名字提交后会跳转到 /greet 并显示问候语------这演示了模板渲染GET 参数获取
  2. 直接访问 http://127.0.0.1:5000/api/greet/张三,会看到一段 JSON 数据------这演示了动态路由<username>)以及 Flask 如何把 Python 字典自动转换成 JSON 响应,这也是写 RESTful API 时最常用的写法。

3. 代码要点解析

  • @app.route('/path'):这是 Flask 的路由装饰器,把某个 URL 路径和一个视图函数绑定起来。
  • render_template():从 templates 文件夹中查找 HTML 文件并渲染,支持 Jinja2 模板语法(如 {``{ 变量 }}{% if %} 等)。
  • request.args:获取 URL 中 ?key=value 形式的查询参数;如果是表单 POST 提交,则使用 request.form
  • <username> 这种写法叫动态路由 ,Flask 会自动把 URL 中对应位置的值作为参数传给视图函数,还可以加类型限定,比如 <int:user_id>
  • 视图函数直接 return 一个字典,Flask 会自动帮你转换成 JSON 响应,这在写接口时非常方便。

四、常用扩展一览

当项目变得复杂时,你通常会用到以下扩展:

扩展 用途
Flask-SQLAlchemy ORM,方便操作数据库
Flask-Migrate 数据库版本迁移管理
Flask-Login 用户登录状态管理
Flask-WTF 表单处理与 CSRF 防护
Flask-RESTful 更规范地构建 RESTful API
Flask-CORS 处理跨域请求

五、总结

通过本文,我们了解了:

  1. Flask 是一个轻量、灵活的 Python Web 微框架,核心基于 Werkzeug 和 Jinja2;
  2. 通过几行代码就能跑起一个 Web 服务,路由用装饰器声明,非常直观;
  3. 结合 render_template 和动态路由,可以快速搭建带页面交互的应用;
  4. 直接 return 字典即可实现 JSON 接口,非常适合做前后端分离的后端服务。

Flask 的哲学是"给你砖头,不限制你怎么盖房子",正因如此,它既能拿来写一个简单的个人主页,也能作为大型项目的 API 服务骨架。如果你正在学习 Python Web 开发,Flask 会是一个非常友好的起点。

后续我会继续分享 Flask 结合数据库(SQLAlchemy)、用户登录(Flask-Login)以及部署上线(Gunicorn + Nginx)的实战内容,欢迎关注~


参考资料

相关推荐
特立独行的猫A1 小时前
用仓颉语言写 Coding Agent:cjh 是怎么实现的
前端
码农学院1 小时前
外贸独立站GEO实战:用 Python 自动生成多语言 llms.txt 和 Schema 站点地图
人工智能·python·chatgpt·geo·geo优化·ai优化aio
特立独行的猫A1 小时前
cjh:基于华为仓颉语言的原生 Coding Agent Harness 实践与设计思考
前端
jsjzsl21 小时前
独立自由度框架下核聚变的本体论本质与商业化技术新路径
人工智能·python·算法
晚安日记wanna1 小时前
大文件分片上传的五层追问从 Blob 切片到秒传与弱网容错
前端·面试
Thomas.Sir1 小时前
第45课:TensorFlow|异常检测实战【工业设备数据故障识别模型搭建】
人工智能·python·tensorflow
Htr_1 小时前
Anysite.io 使用指南:把整个 Web 变成 AI 智能体的数据库
前端·数据库·人工智能
知兀1 小时前
【前端】受控和非受控组件
前端·javascript·react
数商云企2 小时前
2026年西安电商智能客服开发选数商云企,技术稳交付快
大数据·python