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. 运行应用
终端执行:
启动成功后,访问 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.css、app.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 生成)