本文详细介绍 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
运行
# 创建项目文件夹 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
运行
pip install flask验证安装:
bash
运行
flask --version出现版本号即安装成功,示例:Python 3.9.0/Flask 2.3.3。
2.4 第一个 Flask 程序(Hello Flask)
创建app.py文件,写入以下代码:
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 app.py控制台输出:
plaintext
* 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
运行
@app.route('/') def index(): return "首页" @app.route('/about') def about(): return "关于页面"3.2 带参数的路由
支持在 URL 中传递参数,支持指定参数类型:
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
运行
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
运行
from flask import url_for @app.route('/index', endpoint='idx') def index(): return "首页" # 测试url_for @app.route('/test') def test(): return url_for('idx') # 输出:/index3.5 路由优先级
相同 URL 路由,先定义的优先匹配,后定义的不会执行。
四、请求与响应处理
Flask 通过request对象获取请求数据,通过返回值、make_response构造响应。
4.1 request 常用属性
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
运行
# 访问:/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
运行
@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
运行
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 response4.5 返回 JSON 数据
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
flask_demo/ app.py templates/ index.html base.html5.2 渲染模板
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
预览
<!-- 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
预览
<!DOCTYPE html> <html> <head> <title>{% block title %}默认标题{% endblock %}</title> </head> <body> <div class="content"> {% block content %}{% endblock %} </div> </body> </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.png6.2 模板中加载静态文件
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
运行
# 设置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
运行
# 设置密钥 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-wtf8.2 定义表单类
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
运行
@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
预览
<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
运行
pip install flask-sqlalchemy9.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
运行
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交互环境或代码中执行 with app.app_context(): db.create_all()9.5 增删改查
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
运行
# 创建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
运行
# app.py中 from user import user_bp app.register_blueprint(user_bp)访问:/user/login、/user/info。
十一、错误页面处理
自定义 404、500 等错误页面。
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
运行
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:app13.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 部署等进阶内容,逐步成长为全栈开发者。
建议多动手实践,从简单页面开始,逐步完成完整项目,在实战中巩固知识、提升能力。