Flask作为Python轻量级Web框架,凭借其"微核心+可扩展"设计理念,已成为快速开发API和Web应用的首选工具。2023年Stack Overflow调查显示,Flask在Python Web框架中使用率达43%,仅次于Django。
Flask生态通过以下方式应对挑战:
Flask如同"乐高积木":
模块 | 功能 | 核心类/方法 |
---|---|---|
Application | 应用实例 | Flask(name) |
Routing | URL映射 | @app.route() |
Jinja2 | 模板渲染 | render_template() |
Blueprint | 模块化组织 | Blueprint() |
Config | 配置管理 | app.config[] |
特性 | Flask | Django | FastAPI |
---|---|---|---|
架构类型 | 微框架 | 全栈框架 | 异步框架 |
学习曲线 | 平缓 | 陡峭 | 中等 |
扩展性 | 极高 | 中等 | 高 |
适用场景 | API/中小应用 | 复杂CMS系统 | 高性能API |
# 创建虚拟环境
python -m venv venv
source venv/bin/activate
# 安装依赖
pip install flask==2.3.2 flask-sqlalchemy==3.0.3
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "欢迎来到Flask世界!
"
@app.route('/user/' )
def show_user(username):
return f"用户: {username}"
if __name__ == '__main__':
app.run(debug=True)
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True)
@app.route('/create/' )
def create_user(name):
user = User(username=name)
db.session.add(user)
db.session.commit()
return f"用户{name}已创建!"
DOCTYPE html>
<html>
<body>
<h1>{{ user.username }}的资料h1>
<p>注册时间: {{ user.create_time }}p>
body>
html>
# 视图函数
@app.route('/user/<int:user_id>')
def user_profile(user_id):
user = User.query.get(user_id)
return render_template('user.html', user=user)
$ curl http://127.0.0.1:5000/user/Alice
用户: Alice
>>> from app import db
>>> db.create_all() # 初始化数据库
>>> User.query.all()
[<User 'Alice'>]
框架 | RPS | 平均延迟 | 错误率 |
---|---|---|---|
Flask | 1,200 | 83ms | 0.1% |
FastAPI | 8,700 | 11ms | 0.01% |
# app/__init__.py
def create_app(config):
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
return app
from flask import Flask
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(2)
app = Flask(__name__)
@app.route('/long-task')
def long_task():
executor.submit(background_task)
return "任务已启动"
from flask_talisman import Talisman
Talisman(app, content_security_policy={
'default-src': "'self'",
'script-src': ["'self'", 'cdn.example.com']
})
app.run(debug=True) # 必须禁用debug模式
# 错误写法
query = f"SELECT * FROM users WHERE name = '{name}'"
# 正确写法
User.query.filter_by(name=name).first()
from flask_debugtoolbar import DebugToolbarExtension
toolbar = DebugToolbarExtension(app)
类型 | 推荐工具 |
---|---|
ORM | SQLAlchemy/Peewee |
异步 | Quart/Gevent |
安全 | Flask-Talisman/Authlib |
部署 | Gunicorn/Docker |
实战挑战:
尝试使用Flask+React构建一个全栈博客系统,并实现JWT认证功能。欢迎在评论区分享你的GitHub仓库链接!
“Simple is better than complex.”
—— Flask的设计哲学
建议开发流程:
# 初始化项目
mkdir myflaskapp && cd myflaskapp
python -m venv venv
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 运行开发服务器
flask run --port 5000 --debug