Flask 快速入门指南

Jason 技术测试 发布于 2026年04月20日 更新于 2026年04月22日
Python Flask 教程

Flask 2026 快速入门指南

Flask 快速入门指南(2026 最新版)

Flask Python 生态中轻量、灵活、易上手 Web 微框架,无需复杂配置即可快速搭建 Web 服务、API 或小型网站,适合初学者入门与快速原型开发。以下从安装、基础使用、核心功能到实战案例,带你快速掌握 Flask

一、环境准备与安装

1. 前提条件

         Python 版本:3.9 及以上Flask 3.x 推荐 3.11/3.12

         检查 Python 版本:

bash
python --version  # Windows
python3 --version # macOS/Linux

2. 安装 Flask

使用pip安装最新稳定版(3.1.x):

bash
pip install flask  # 全局安装
#
或虚拟环境安装(推荐)
python -m venv venv
#
激活虚拟环境
# Windows: venv\Scripts\activate
# macOS/Linux: source venv/bin/activate
pip install flask

二、第一个 Flask 应用(Hello World

1. 创建项目文件

新建app.py,写入最小应用代码:

python
# 导入Flask核心类
from flask import Flask

#
初始化应用实例,__name__为当前模块名
app = Flask(__name__)

#
定义路由:访问根路径/时执行函数
@app.route('/')
def hello_world():
    #
返回响应内容(字符串/HTML均可)
    return "<h1>Hello, Flask! 👋</h1>"

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

2. 运行应用

终端执行:

bash
python app.py

启动成功后,访问 http://127.0.0.1:5000,即可看到页面。

3. 官方推荐启动方式(Flask 2.x+

bash
# 自动识别app.py中的app实例
flask run
#
指定调试模式
flask run --debug
#
自定义端口
flask run --debug --port=8000

三、核心基础功能

1. 路由与视图函数

         基础路由:绑定 URL 与函数,支持 GET/POST 等方法

python
# 单一路由
@app.route('/about')
def about():
    return "
关于我们"

#
多路由映射同一函数
@app.route('/')
@app.route('/home')
def home():
    return "
首页"

#
指定请求方法(默认GET
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return "
登录提交"
    return "
登录页面"

         动态路由URL 传递参数

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

#
整数参数
@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f"
文章ID{post_id}"

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

2. 请求与响应

         获取请求数据

python
from flask import request, jsonify, make_response

# GET
参数:?name=xxx&age=xxx
@app.route('/get')
def get_params():
    name = request.args.get('name', '
默认名')
    age = request.args.get('age', 0, type=int)
    return f"
姓名:{name},年龄:{age}"

# POST
表单数据
@app.route('/post', methods=['POST'])
def post_form():
    username = request.form.get('username')
    password = request.form.get('password')
    return f"
账号:{username},密码:{password}"

# JSON
数据
@app.route('/json', methods=['POST'])
def post_json():
    data = request.get_json()
    return jsonify({
        "code": 0,
        "msg": "
成功",
        "data": data
    })

         自定义响应

python
@app.route('/resp')
def custom_resp():
    #
直接返回(内容, 状态码, 响应头)
    return "
响应内容", 201, {"Custom-Header": "Flask"}

#
make_response创建
@app.route('/make')
def make_resp():
    resp = make_response("
自定义响应")
    resp.status_code = 404
    resp.headers['X-Powered-By'] = 'Flask'
    return resp

3. 模板渲染(Jinja2

Flask 内置 Jinja2 模板引擎,支持动态 HTML 渲染。

1.       新建templates目录,创建index.html

html
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
    {% if items %}
    <ul>
        {% for item in items %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
    {% else %}
    <p>
无数据</p>
    {% endif %}
</body>
</html>

2.       视图函数渲染模板:

python
from flask import render_template

@app.route('/tmpl')
def template():
    return render_template(
        'index.html',
        title='Flask
模板',
        name='
张三',
        items=['Python', 'Flask', 'Web']
    )

4. 静态文件(CSS/JS/ 图片)

         新建static目录,存放style.cssapp.js、图片等

         模板中引用:

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

5. 重定向与错误页面

python
from flask import redirect, url_for, abort

#
重定向
@app.route('/redirect')
def to_home():
    return redirect(url_for('hello_world'))

# 404
错误页面
@app.errorhandler(404)
def page_not_found(error):
    return "<h1>
页面找不到啦!😥</h1>", 404

#
主动抛出错误
@app.route('/admin')
def admin():
    abort(403)  # 403
禁止访问

四、小型实战:TODO 待办清单

1. 完整代码([app.py](app.py)

python
from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

#
模拟数据库
todos = []

#
首页:展示TODO列表
@app.route('/')
def index():
    return render_template('todo.html', todos=todos)

#
添加TODO
@app.route('/add', methods=['POST'])
def add_todo():
    content = request.form.get('content')
    if content:
        todos.append({
            'id': len(todos)+1,
            'content': content,
            'done': False
        })
    return redirect(url_for('index'))

#
标记完成/未完成
@app.route('/toggle/<int:todo_id>')
def toggle_todo(todo_id):
    for todo in todos:
        if todo['id'] == todo_id:
            todo['done'] = not todo['done']
            break
    return redirect(url_for('index'))

#
删除TODO
@app.route('/delete/<int:todo_id>')
def delete_todo(todo_id):
    global todos
    todos = [t for t in todos if t['id'] != todo_id]
    return redirect(url_for('index'))

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

2. 模板文件(templates/todo.html

html
<!DOCTYPE html>
<html>
<head>
    <title>TODO
清单</title>
    <style>
        .done { text-decoration: line-through; color: #666; }
    </style>
</head>
<body>
    <h1>Flask TODO
清单</h1>
    <form action="/add" method="post">
        <input type="text" name="content" placeholder="
输入待办事项" required>
        <button type="submit">
添加</button>
    </form>
    <ul>
        {% for todo in todos %}
        <li>
            <span class="{{ 'done' if todo.done else '' }}">{{ todo.content }}</span>
            <a href="/toggle/{{ todo.id }}">✅</a>
            <a href="/delete/{{ todo.id }}" style="color:red;">🗑️</a>
        </li>
        {% endfor %}
    </ul>
</body>
</html>

3. 运行效果

         访问http://127.0.0.1:5000

         支持添加、标记完成、删除待办事项

五、进阶常用功能

1. 会话与 Cookie

python
from flask import session

#
配置密钥(必须)
app.secret_key = 'your-secret-key-keep-it-safe'

#
设置会话
@app.route('/set')
def set_session():
    session['username'] = 'flask_user'
    return "
会话已设置"

#
获取会话
@app.route('/get')
def get_session():
    username = session.get('username', '
访客')
    return f"
当前用户:{username}"

#
删除会话
@app.route('/del')
def del_session():
    session.pop('username', None)
    return "
会话已删除"

2. 构建 RESTful API

python
from flask import jsonify

#
获取所有TODO
@app.route('/api/todos')
def api_todos():
    return jsonify(todos)

#
获取单个TODO
@app.route('/api/todos/<int:todo_id>')
def api_todo(todo_id):
    todo = next((t for t in todos if t['id'] == todo_id), None)
    if todo:
        return jsonify(todo)
    return jsonify({"error": "
未找到"}), 404

3. 蓝图(Blueprint):模块化拆分

当项目变大时,用 Blueprint 拆分路由:

python
# 新建auth.py
from flask import Blueprint, render_template

auth_bp = Blueprint('auth', __name__, url_prefix='/auth')

@auth_bp.route('/login')
def login():
    return "
登录页面"

#
app.py中注册
from auth import auth_bp
app.register_blueprint(auth_bp)

六、部署上线(简要)

         开发环境flask run(仅本地测试)

         生产环境:搭配 Gunicorn+Nginx

bash
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 app:app

七、学习资源

         官方文档(中文):https://flask.github.net.cn/

         Flask-SQLAlchemy(数据库)

         Flask-WTF(表单验证)

         Flask-Login(用户登录)

 

 

(注:文档部分内容由 AI 生成)