Python Flask 快速入门
概述
Flask 是 Python 生态中最流行的轻量级 Web 框架之一,它核心简洁但功能可扩展,通过丰富的扩展生态可以实现路由、模板渲染、数据库ORM、身份认证、API 文档生成等完整 Web 应用所需的功能。Flask 的设计理念是"微框架",保持核心功能最小化,通过扩展来添加所需特性。
基础语法
Flask 应用的核心是 app 对象,通过装饰器定义路由和处理函数。请求到达时,Flask 根据 URL 匹配到对应的视图函数,处理后返回响应。
- app = Flask(__name__):创建 Flask 应用实例。
- @app.route('/path'):装饰器,将 URL 路径绑定到视图函数。
- request:请求上下文对象。
- render_template():使用 Jinja2 渲染 HTML 模板。
- jsonify():将 Python 对象转换为 JSON 响应。
完整代码示例+注释
from flask import Flask, render_template, request, jsonify, abort, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'dev-secret-key')
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/users', methods=['GET', 'POST'])
def api_users():
if request.method == 'GET':
users = User.query.all()
return jsonify([{'id': u.id, 'username': u.username} for u in users])
else:
data = request.get_json()
user = User(username=data['username'], email=data['email'])
db.session.add(user)
db.session.commit()
return jsonify({'id': user.id}), 201
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True, host='0.0.0.0', port=5000)
运行效果
运行 python app.py 后,Flask 内置的开发服务器会启动在 http://127.0.0.1:5000。访问 / 可以看到首页,访问 /api/users 可以获取用户列表,POST /api/users 可以创建新用户。
常见问题
Q1:Flask 和 Django 应该选哪个
Flask 是微框架,核心简洁,需要的功能自行选择扩展。Django 是全功能框架,内置 ORM、管理后台、用户认证等。
Q2:Flask 如何处理文件上传
使用 request.files 获取上传的文件对象,保存时验证文件类型和大小。
Q3:Flask 如何处理跨域请求
安装 flask-cors 扩展后,使用 CORS(app) 开启全局跨域支持。
延伸阅读
- Flask 官方文档:https://flask.palletsprojects.com/