Flask作为Python最受欢迎的轻量级Web框架,以"微核心+可扩展"的设计哲学著称。其核心代码仅约2000行,却支持通过扩展实现完整Web开发功能。这种设计使得开发者可以:
特性 | Flask | Django | FastAPI |
---|---|---|---|
核心大小 | 轻量 | 重量级 | 轻量 |
学习曲线 | 平缓 | 较陡 | 中等 |
灵活性 | 高 | 中等 | 高 |
内置功能 | 较少 | 丰富 | 中等 |
异步支持 | 2.0+支持 | 3.0+支持 | 原生支持 |
适用场景 | 微服务、API | 全栈开发 | 高性能API |
# 创建虚拟环境
python -m venv flask-env
# 激活环境
source flask-env/bin/activate # Linux/Mac
flask-env\Scripts\activate.bat # Windows
# 安装Flask
pip install flask
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '<h1>Welcome to Flask World!</h1>'
if __name__ == '__main__':
app.run(debug=True)
启动应用:
python app.py
app = Flask(__name__)
__name__
确定根路径@app.route('/')
def home()
app.run()
/myapp
/templates # HTML模板
/static # 静态文件
/css
/js
/images
config.py # 配置文件
app.py # 主程序
# config.py
class Config:
SECRET_KEY = 'your-secret-key'
DEBUG = False
SQLALCHEMY_TRACK_MODIFICATIONS = False
class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///dev.db'
class ProductionConfig(Config):
DEBUG = False
SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@localhost/prod_db'
# app.py
app.config.from_object('config.DevelopmentConfig')
# app/__init__.py
from flask import Flask
from .config import Config
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
# 初始化扩展
from .extensions import db
db.init_app(app)
# 注册蓝本
from .main import bp as main_bp
app.register_blueprint(main_bp)
return app
# 动态路由
@app.route('/user/<username>')
def show_user(username):
return f'User: {username}'
# 指定HTTP方法
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 处理登录逻辑
# 显示登录表单
# 类型转换器
@app.route('/post/<int:post_id>')
def show_post(post_id):
# post_id自动转为整数
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
name = request.form.get('name')
file = request.files['document']
ip_address = request.remote_addr
<!-- templates/show.html -->
<!DOCTYPE html>
<html>
<body>
<h1>{{ title }}</h1>
<ul>
{% for item in items %}
<li class="{% if loop.first %}first-item{% endif %}">
{{ item }}
</li>
{% endfor %}
</ul>
</body>
</html>
# 视图函数
@app.route('/show')
def show():
return render_template('show.html',
title='项目列表',
items=['Flask', 'Django', 'FastAPI'])
扩展名称 | 功能说明 | 安装命令 |
---|---|---|
Flask-SQLAlchemy | ORM数据库集成 | pip install flask-sqlalchemy |
Flask-WTF | 表单处理 | pip install flask-wtf |
Flask-Login | 用户认证 | pip install flask-login |
Flask-Mail | 邮件发送 | pip install flask-mail |
Flask-RESTful | REST API支持 | pip install flask-restful |
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(80), unique=True)
email = db.Column(db.String(120), unique=True)
# 创建表
with app.app_context():
db.create_all()
Flask如同瑞士军刀般精巧实用,既适合快速原型开发,也能通过扩展构建复杂应用。建议新手从本文示例入手,逐步实践各个组件,最终将各模块融会贯通。记住:最好的学习方式是动手编码!持续关注Flask社区动态,参与开源项目贡献,将帮助您更快成长为Flask专家。