Logo
Published on

1.1.Flask 快速上手

Authors
  • avatar
    Name
    xiaobai
    Twitter

1.概念与定位

1.1.WSGI 与 Flask

  • Flask 基于 WSGI(Web Server Gateway Interface)标准,常与 Werkzeug(底层 WSGI 工具集)和 Jinja2(模板引擎)一起使用。
  • WSGI 更偏向同步阻塞模型;Flask 通过简单、灵活的扩展生态,适合快速构建中小型 Web 服务与站点。

1.2.与 FastAPI 的简要对比

  • FastAPI 基于 ASGI,原生支持异步、高性能与自动文档;Flask 则以“微框架”著称,胜在生态广、学习成本低、扩展能力强。
  • 选择建议:
    • 高并发、严格的类型提示与自动 OpenAPI 文档:倾向 FastAPI。
    • 快速原型、经典 Web(模板渲染)、成熟扩展生态:倾向 Flask。

2.安装与 Hello World

2.1.安装

pip install flask

2.2.最小可运行示例

from flask import Flask

app = Flask(__name__)

@app.get('/')
def hello():
    return 'Hello, Flask!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
  • debug=True 开启调试与自动重载。
  • 访问 http://127.0.0.1:5000/ 验证应用是否启动成功。

3.路由与请求响应

3.1.基础路由

@app.get('/ping')
def ping():
    return {'message': 'pong'}
  • Flask 原生支持返回字符串;返回字典时会自动转为 JSON 响应。

3.2.接收参数

  1. 路由参数(路径参数):
@app.get('/double/<int:num>')
def double(num: int):
    return {'result': num * 2}
  1. 查询参数:
from flask import request

@app.get('/search')
def search():
    q = request.args.get('q', '')
    return {'q': q}
  1. 请求体(JSON):
from flask import request

@app.post('/echo')
def echo():
    data = request.get_json(silent=True) or {}
    return {'received': data}

4.Blueprint(模块化路由)

  • Blueprint 用于将路由分组,便于团队协作与大型项目的结构化管理。
from flask import Blueprint

api = Blueprint('api', __name__, url_prefix='/api')

@api.get('/status')
def status():
    return {'ok': True}

app.register_blueprint(api)

5.开发配置与自动重载

  • 建议使用环境变量或配置文件管理 DEBUGSECRET_KEY 等:
import os

app.config.update(
    DEBUG=os.getenv('FLASK_DEBUG', 'true').lower() == 'true',
    SECRET_KEY=os.getenv('SECRET_KEY', 'dev-secret'),
)

6.同步阻塞与并发思考

  • Flask 为 WSGI 应用,默认同步;若存在 CPU 密集或阻塞 I/O,可考虑:
    • 通过 gevent / eventlet 提升并发;
    • 借助反向代理(如 Nginx)与多进程服务(如 gunicorn -w 4)提升吞吐;
    • 将高并发任务迁移至队列/异步任务系统(如 Celery)。

7.总结

  • 以最小心智负担搭建 Web 服务,快速交付;
  • 配合 Blueprint、配置管理与部署方案,可稳定支撑中等规模的后端应用。