Python Web 开发:Flask 快速入门教程

本文详细介绍 Python Web 开发中Flask 框架的全套入门知识,涵盖环境安装、路由视图、请求响应、模板渲染、表单处理、数据库集成、会话认证、蓝图、错误处理、静态文件、项目部署等核心内容。全文通俗易懂、案例可直接运行,适合零基础小白快速掌握 Flask 开发,是进入 Python 后端开发的必备教程。

前言

Python 作为简洁高效、生态丰富的编程语言,在 Web 开发领域占据重要地位。Flask是 Python 生态中最流行的轻量级 Web 框架,以 "微内核、易扩展、上手快" 著称,非常适合快速开发 API 接口、个人博客、小型网站、管理后台、自动化服务等项目。相比 Django 的 "大而全",Flask 追求 "小而美",只保留核心 Web 功能,其余组件可按需安装,自由度极高,是初学者入门 Web 开发的最佳选择。

本专栏带你从零基础起步,一步步掌握 Flask 核心用法,从 Hello World 到完整项目实战,让你快速具备独立开发 Flask 应用的能力,为后续学习进阶框架、分布式服务、前后端分离打下坚实基础。

随着互联网发展,Web 开发需求日益增长。Flask 凭借轻量、灵活、易上手的特点,成为中小项目与快速原型开发的首选框架。无论你是学生、职场人士,还是转行编程的初学者,都能通过 Flask 快速实现自己的 Web 想法。本文从安装到实战,由浅入深,带你全面掌握 Flask 开发技能。


一、什么是 Flask?

Flask 是由 Armin Ronacher 开发的轻量级 Python Web 微框架,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎,遵循 "微内核" 设计理念:

  • 核心仅包含路由、请求响应、模板引擎、会话管理等基础功能
  • 扩展机制完善,可通过第三方库添加数据库、表单、认证、缓存等功能
  • 代码简洁、文档清晰、学习成本低
  • 支持 WSGI 标准,兼容主流服务器与部署方式
  • 适合小型网站、API 服务、管理后台、个人项目、原型开发

适用场景:

  • 个人博客、笔记系统
  • RESTful API 接口服务
  • 小型管理后台
  • 数据可视化看板
  • 自动化办公 Web 工具
  • 测试环境、临时服务

二、Flask 环境搭建与准备

2.1 开发环境要求

  • Python 3.6 及以上版本
  • 命令行工具(CMD、PowerShell、Terminal)
  • 代码编辑器(VS Code、PyCharm 均可)

2.2 虚拟环境创建(推荐)

为避免依赖冲突,建议为每个项目创建独立虚拟环境:

bash

运行

bash 复制代码
# 创建项目文件夹
mkdir flask_demo
cd flask_demo

# 创建虚拟环境
python -m venv venv

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

激活后命令行前缀会出现(venv)标识。

2.3 安装 Flask

在激活的虚拟环境中执行:

bash

运行

bash 复制代码
pip install flask

验证安装:

bash

运行

bash 复制代码
flask --version

出现版本号即安装成功,示例:Python 3.9.0 / Flask 2.3.3。

2.4 第一个 Flask 程序(Hello Flask)

创建app.py文件,写入以下代码:

python

运行

python 复制代码
# 导入Flask核心类
from flask import Flask

# 创建应用实例,__name__是当前模块名
app = Flask(__name__)

# 定义路由:访问根路径/时执行下面函数
@app.route('/')
def index():
    return "<h1>Hello Flask!欢迎来到Python Web开发世界</h1>"

# 程序入口:直接运行时启动服务
if __name__ == '__main__':
    # debug=True:开启调试模式,代码修改自动重启
    app.run(debug=True)

2.5 运行与访问

命令行执行:

bash

运行

python 复制代码
python app.py

控制台输出:

plaintext

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

打开浏览器访问:http://127.0.0.1:5000,即可看到页面。


三、Flask 核心:路由与视图函数

路由是 Flask 的核心,用于将 URL 地址绑定到视图函数,用户访问 URL 时执行对应函数并返回结果。

3.1 基础路由

python

运行

python 复制代码
@app.route('/')
def index():
    return "首页"

@app.route('/about')
def about():
    return "关于页面"

3.2 带参数的路由

支持在 URL 中传递参数,支持指定参数类型:

python

运行

python 复制代码
# 字符串参数(默认)
@app.route('/user/<username>')
def user_profile(username):
    return f"用户:{username}"

# 整数参数
@app.route('/age/<int:age>')
def user_age(age):
    return f"年龄:{age}"

# 浮点数参数
@app.route('/price/<float:price>')
def product_price(price):
    return f"价格:{price}"

# 路径参数(可包含/)
@app.route('/path/<path:subpath>')
def show_path(subpath):
    return f"路径:{subpath}"

3.3 指定请求方法

Flask 默认支持 GET 请求,可通过methods指定支持的请求类型:

python

运行

python 复制代码
from flask import request

# 同时支持GET和POST
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return "处理登录请求"
    return "显示登录页面"

常用请求方法:GET、POST、PUT、DELETE。

3.4 路由别名与 url_for

使用endpoint指定路由别名,通过url_for反向解析 URL:

python

运行

python 复制代码
from flask import url_for

@app.route('/index', endpoint='idx')
def index():
    return "首页"

# 测试url_for
@app.route('/test')
def test():
    return url_for('idx')  # 输出:/index

3.5 路由优先级

相同 URL 路由,先定义的优先匹配,后定义的不会执行。


四、请求与响应处理

Flask 通过request对象获取请求数据,通过返回值、make_response构造响应。

4.1 request 常用属性

python

运行

python 复制代码
from flask import request

@app.route('/req')
def req_info():
    # 请求方法
    method = request.method
    # URL地址
    url = request.url
    # GET参数
    args = request.args
    # POST表单数据
    form = request.form
    # JSON数据
    json_data = request.json
    # 请求头
    headers = request.headers
    # 客户端IP
    ip = request.remote_addr

    return f"""
    请求方法:{method}<br>
    请求地址:{url}<br>
    客户端IP:{ip}
    """

4.2 获取 GET 请求参数

python

运行

python 复制代码
# 访问:/search?keyword=python&page=1
@app.route('/search')
def search():
    keyword = request.args.get('keyword', '')
    page = request.args.get('page', 1, type=int)
    return f"搜索:{keyword},第{page}页"

4.3 获取 POST 请求参数

python

运行

python 复制代码
@app.route('/post', methods=['POST'])
def post_test():
    username = request.form.get('username')
    password = request.form.get('password')
    return f"用户名:{username},密码:{password}"

4.4 构造响应对象

python

运行

python 复制代码
from flask import make_response

@app.route('/resp')
def resp():
    # 构造响应
    response = make_response("自定义响应内容", 200)
    # 设置响应头
    response.headers['Author'] = 'Flask'
    # 设置Cookie
    response.set_cookie('username', 'flask_user')
    return response

4.5 返回 JSON 数据

python

运行

python 复制代码
from flask import jsonify

@app.route('/api/user')
def api_user():
    data = {
        "name": "张三",
        "age": 20,
        "gender": "男"
    }
    return jsonify(data)

五、Jinja2 模板引擎

Flask 默认使用 Jinja2 模板引擎,实现 HTML 与 Python 代码分离,支持变量、循环、条件判断、过滤器、继承等。

5.1 模板目录结构

项目根目录创建templates文件夹,所有 HTML 文件放入其中:

plaintext

python 复制代码
flask_demo/
    app.py
    templates/
        index.html
        base.html

5.2 渲染模板

python

运行

python 复制代码
from flask import render_template

@app.route('/template')
def template_demo():
    # 传递变量到模板
    data = {
        "title": "Flask模板",
        "content": "Hello Jinja2",
        "user_list": ["张三", "李四", "王五"]
    }
    return render_template('index.html', **data)

5.3 模板基础语法

html

预览

html 复制代码
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ content }}</h1>

    <!-- 条件判断 -->
    {% if user_list %}
    <ul>
        <!-- 循环 -->
        {% for user in user_list %}
        <li>{{ user }}</li>
        {% endfor %}
    </ul>
    {% else %}
    <p>暂无用户</p>
    {% endif %}

    <!-- 过滤器 -->
    <p>{{ content | upper }}</p>
</body>
</html>

5.4 模板继承(复用布局)

创建基础模板base.html:

html

预览

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
    <div class="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

子页面继承:

html

预览

html 复制代码
{% extends 'base.html' %}

{% block title %}子页面{% endblock %}

{% block content %}
<h1>继承自base.html</h1>
{% endblock %}

5.5 常用过滤器

  • {``{ name | upper }}:转大写
  • {``{ name | lower }}:转小写
  • {``{ text | truncate(10) }}:截断文本
  • {``{ price | round(2) }}:保留两位小数
  • {``{ list | length }}:获取长度

六、静态文件处理

静态文件包括 CSS、JS、图片、字体等,Flask 默认从static目录加载。

6.1 静态目录结构

plaintext

复制代码
flask_demo/
    static/
        css/
            style.css
        js/
            app.js
        images/
            logo.png

6.2 模板中加载静态文件

html

预览

html 复制代码
{% load static %}  <!-- Flask自动支持,无需手动加载 -->

<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
<img src="{{ url_for('static', filename='images/logo.png') }}">

七、Cookie 与 Session

用于保持用户状态,Cookie 存储在客户端,Session 存储在服务器端。

7.1 Cookie 操作

python

运行

html 复制代码
# 设置Cookie
@app.route('/set_cookie')
def set_cookie():
    resp = make_response("设置Cookie成功")
    resp.set_cookie('username', 'flask', max_age=3600)
    return resp

# 获取Cookie
@app.route('/get_cookie')
def get_cookie():
    username = request.cookies.get('username', '未设置')
    return f"Cookie用户名:{username}"

7.2 Session 操作

使用 Session 必须设置密钥:

python

运行

python 复制代码
# 设置密钥
app.secret_key = 'your_secret_key_here'

# 设置Session
@app.route('/set_session')
def set_session():
    session['user'] = 'flask_user'
    return "设置Session成功"

# 获取Session
@app.route('/get_session')
def get_session():
    user = session.get('user', '未登录')
    return f"Session用户:{user}"

# 删除Session
@app.route('/del_session')
def del_session():
    session.pop('user', None)
    return "删除Session成功"

八、Flask-WTF 表单处理

处理 Web 表单,支持验证、防 CSRF 攻击。

8.1 安装扩展

bash

运行

复制代码
pip install flask-wtf

8.2 定义表单类

python

运行

python 复制代码
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length

# 定义登录表单
class LoginForm(FlaskForm):
    username = StringField('用户名', validators=[
        DataRequired(),
        Length(min=3, max=20)
    ])
    password = PasswordField('密码', validators=[DataRequired()])
    submit = SubmitField('登录')

8.3 视图与模板使用

python

运行

python 复制代码
@app.route('/form', methods=['GET', 'POST'])
def form_demo():
    form = LoginForm()
    if form.validate_on_submit():
        return f"登录成功:{form.username.data}"
    return render_template('form.html', form=form)

form.html:

html

预览

html 复制代码
<form method="POST">
    {{ form.hidden_tag() }} <!-- 防CSRF -->
    {{ form.username.label }} {{ form.username }}<br>
    {{ form.password.label }} {{ form.password }}<br>
    {{ form.submit }}
</form>

九、Flask-SQLAlchemy 数据库操作

Flask 常用 ORM 库,支持 SQLite、MySQL、PostgreSQL。

9.1 安装

bash

运行

bash 复制代码
pip install flask-sqlalchemy

9.2 配置数据库

python

运行

复制代码
from flask_sqlalchemy import SQLAlchemy

# 配置SQLite数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 创建数据库实例
db = SQLAlchemy(app)

9.3 定义模型

python

运行

python 复制代码
class User(db.Model):
    # 表名
    __tablename__ = 'user'
    # 字段
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    age = db.Column(db.Integer)

    def __repr__(self):
        return f'<User {self.username}>'

9.4 创建表

python

运行

python 复制代码
# 在Python交互环境或代码中执行
with app.app_context():
    db.create_all()

9.5 增删改查

python

运行

python 复制代码
# 增
@app.route('/add')
def add_user():
    user = User(username='flask', age=20)
    db.session.add(user)
    db.session.commit()
    return "添加成功"

# 查
@app.route('/query')
def query_user():
    user = User.query.filter_by(username='flask').first()
    return f"ID:{user.id},用户名:{user.username}"

# 改
@app.route('/update')
def update_user():
    user = User.query.get(1)
    user.age = 21
    db.session.commit()
    return "修改成功"

# 删
@app.route('/delete')
def delete_user():
    user = User.query.get(1)
    db.session.delete(user)
    db.session.commit()
    return "删除成功"

十、蓝图(Blueprint)模块化管理

项目变大后,用蓝图拆分路由,实现模块化。

10.1 创建蓝图

python

运行

python 复制代码
# 创建user.py蓝图文件
from flask import Blueprint

# 初始化蓝图
user_bp = Blueprint('user', __name__, url_prefix='/user')

# 蓝图路由
@user_bp.route('/login')
def login():
    return "用户登录"

@user_bp.route('/info')
def info():
    return "用户信息"

10.2 注册蓝图

python

运行

python 复制代码
# app.py中
from user import user_bp
app.register_blueprint(user_bp)

访问:/user/login、/user/info。


十一、错误页面处理

自定义 404、500 等错误页面。

python

运行

python 复制代码
# 404错误
@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

# 500错误
@app.errorhandler(500)
def server_error(e):
    return "服务器内部错误", 500

十二、Flask 项目配置管理

12.1 基础配置

python

运行

复制代码
# 调试模式
app.debug = True
# 密钥
app.secret_key = 'xxx'
# 数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'

12.2 配置文件分离

创建config.py:

python

运行

python 复制代码
class Config:
    SECRET_KEY = 'your_secret_key'
    DEBUG = True

class DevelopmentConfig(Config):
    SQLALCHEMY_DATABASE_URI = 'sqlite:///dev.db'

class ProductionConfig(Config):
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = 'mysql://user:pass@localhost/db'

使用:

python

运行

复制代码
app.config.from_object('config.DevelopmentConfig')

十三、Flask 项目部署上线

13.1 关闭调试模式

python

运行

复制代码
app.run(debug=False)

13.2 使用 Gunicorn 部署

bash

运行

复制代码
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app

13.3 部署流程

  1. 导出依赖:pip freeze > requirements.txt
  2. 服务器安装 Python 与虚拟环境
  3. 上传代码,安装依赖
  4. 使用 Gunicorn+Nginx 代理部署

十四、常用 Flask 扩展

  • Flask-SQLAlchemy:数据库 ORM
  • Flask-WTF:表单验证
  • Flask-Login:用户登录认证
  • Flask-Mail:邮件发送
  • Flask-CORS:跨域处理
  • Flask-RESTful:RESTful API 开发
  • Flask-Caching:缓存功能
  • Flask-Migrate:数据库迁移

十五、Flask 完整项目结构示例

plaintext

复制代码
flask_project/
    app.py              # 入口文件
    config.py           # 配置文件
    extensions.py       # 扩展初始化
    requirements.txt    # 依赖列表
    static/             # 静态文件
    templates/          # 模板
    modules/            # 蓝图模块
        user/           # 用户模块
            __init__.py
            views.py
        blog/           # 博客模块
            __init__.py
            views.py

十六、总结

本文全面讲解了 Flask 快速入门的全部核心知识点,从环境搭建到项目部署,覆盖:

  • Flask 基础概念与安装
  • 路由、视图、请求响应
  • 模板引擎与静态文件
  • Cookie、Session、表单验证
  • 数据库 ORM 操作
  • 蓝图模块化、错误处理、配置管理
  • 项目结构与部署上线

Flask 作为轻量级 Web 框架,上手快、灵活性高,是 Python Web 开发的入门首选。掌握本文内容,你已具备独立开发 Flask 项目的能力,可快速实现个人博客、API 接口、管理后台等应用。后续可深入学习 RESTful API、用户权限、缓存、异步、Docker 部署等进阶内容,逐步成长为全栈开发者。

建议多动手实践,从简单页面开始,逐步完成完整项目,在实战中巩固知识、提升能力。

相关推荐
databook3 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站3 小时前
十一、评估测试
开发语言·人工智能·python
szial3 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
青少儿编程课堂4 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
怕浪猫4 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
老歌老听老掉牙5 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
打工仔折腾 AI5 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
梦幻精灵_cq6 小时前
sumdir——一个伪python.built-in的“术法”打造
python
weixin_440730507 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python
天赐范式7 小时前
天赐范式第181天:让视图开始切换——PBFT视图切换与从safety到liveness的跨越
python·pbft·数字生命·天赐范式·动态运行时·拜占庭容错