本文详细介绍 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 部署流程
- 导出依赖:
pip freeze > requirements.txt - 服务器安装 Python 与虚拟环境
- 上传代码,安装依赖
- 使用 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 部署等进阶内容,逐步成长为全栈开发者。
建议多动手实践,从简单页面开始,逐步完成完整项目,在实战中巩固知识、提升能力。