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 部署等进阶内容,逐步成长为全栈开发者。

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

相关推荐
努力学习_小白21 小时前
ResNet-50——pytorch版
人工智能·pytorch·python
战族狼魂1 天前
基于LibreOffice +python 实现一个小型销售管理系统的数据库原型教学实验
数据库·python
m0_640309301 天前
PHP函数怎样适配高可靠性存储硬件_PHP在ZFS RAIDZ环境配置【技巧】
jvm·数据库·python
2402_854808371 天前
Django REST Framework 中实现用户资料更新的完整实践指南
jvm·数据库·python
m0_748839491 天前
golang如何理解weak pointer弱引用_golang weak pointer弱引用总结
jvm·数据库·python
m0_738120721 天前
渗透测试基础ctfshow——Web应用安全与防护(五)
前端·网络·数据库·windows·python·sql·安全
人间打气筒(Ada)1 天前
「码动四季·开源同行」python语言:用户交互
开发语言·python·基本数据类型·注释·变量·常量·文件头
高洁011 天前
大模型微调进阶:多任务微调实战
人工智能·python·深度学习·机器学习·transformer
2401_865439631 天前
mysql如何处理升级后的身份认证兼容性_mysql_native_password配置
jvm·数据库·python
zopple1 天前
四大编程语言对比:PHP、Python、Java与易语言
java·python·php