Python Flask API实战:轻量级Web开发
Python Flask API实战轻量级Web开发引言在Python Web开发中Flask是一个轻量级的Web框架以其简洁和灵活著称。作为一名从Rust转向Python的后端开发者我深刻体会到Flask在快速构建API方面的优势。Flask提供了简洁的路由系统和丰富的扩展生态使得开发变得更加高效。Flask核心概念什么是FlaskFlask是一个微型Web框架具有以下特点轻量级核心功能简单易于扩展灵活性允许开发者自由选择工具和库路由系统装饰器风格的路由定义模板引擎内置Jinja2模板支持扩展生态丰富的第三方扩展架构设计┌─────────────────────────────────────────────────────────────┐ │ Flask 架构 │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 请求层 │───▶│ 路由层 │───▶│ 视图层 │ │ │ │ (Request) │ │ (Router) │ │ (View/API) │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 业务逻辑层 (Service) │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 数据层 (Database) │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘环境搭建与基础配置安装依赖pip install flask flask-restful flask-sqlalchemy基本应用from flask import Flask, jsonify, request app Flask(__name__) app.route(/api/hello, methods[GET]) def hello_world(): return jsonify({message: Hello, World!}) app.route(/api/greet, methods[POST]) def greet(): data request.get_json() name data.get(name, Guest) return jsonify({message: fHello, {name}!}) if __name__ __main__: app.run(debugTrue)路由与视图路由定义from flask import Flask app Flask(__name__) app.route(/) def index(): return Index Page app.route(/user/username) def show_user_profile(username): return fUser: {username} app.route(/post/int:post_id) def show_post(post_id): return fPost {post_id} app.route(/path/path:subpath) def show_subpath(subpath): return fSubpath {subpath}HTTP方法from flask import request, jsonify app.route(/api/users, methods[GET, POST]) def users(): if request.method GET: return jsonify({users: []}) elif request.method POST: data request.get_json() return jsonify({status: created}), 201请求处理请求数据from flask import request app.route(/api/data, methods[POST]) def handle_data(): # 获取JSON数据 json_data request.get_json() # 获取表单数据 form_data request.form # 获取查询参数 query_param request.args.get(param) # 获取文件 file request.files[file] return jsonify({status: success})响应处理from flask import jsonify, make_response app.route(/api/response) def custom_response(): response make_response(jsonify({message: Custom response})) response.headers[X-Custom-Header] Custom Value response.status_code 200 return response高级特性实战蓝图from flask import Blueprint, jsonify api_bp Blueprint(api, __name__, url_prefix/api) api_bp.route(/users) def get_users(): return jsonify({users: []}) api_bp.route(/posts) def get_posts(): return jsonify({posts: []}) app.register_blueprint(api_bp)错误处理from flask import jsonify app.errorhandler(404) def not_found(error): return jsonify({error: Not found}), 404 app.errorhandler(500) def internal_error(error): return jsonify({error: Internal server error}), 500 app.errorhandler(Exception) def handle_exception(e): return jsonify({error: str(e)}), 500中间件app.before_request def before_request(): print(Before request) app.after_request def after_request(response): response.headers[X-Request-Id] 12345 return response app.teardown_request def teardown_request(errorNone): print(Teardown request)实际业务场景场景一用户管理APIfrom flask import Flask, jsonify, request app Flask(__name__) users [ {id: 1, name: 张三, email: zhangsanexample.com}, {id: 2, name: 李四, email: lisiexample.com} ] app.route(/api/users, methods[GET]) def get_users(): return jsonify(users) app.route(/api/users/int:user_id, methods[GET]) def get_user(user_id): user next((u for u in users if u[id] user_id), None) if user: return jsonify(user) return jsonify({error: User not found}), 404 app.route(/api/users, methods[POST]) def create_user(): data request.get_json() new_user { id: len(users) 1, name: data[name], email: data[email] } users.append(new_user) return jsonify(new_user), 201 app.route(/api/users/int:user_id, methods[PUT]) def update_user(user_id): user next((u for u in users if u[id] user_id), None) if user: data request.get_json() user.update(data) return jsonify(user) return jsonify({error: User not found}), 404 app.route(/api/users/int:user_id, methods[DELETE]) def delete_user(user_id): global users users [u for u in users if u[id] ! user_id] return jsonify({status: deleted}), 200场景二数据库集成from flask import Flask from flask_sqlalchemy import SQLAlchemy app Flask(__name__) app.config[SQLALCHEMY_DATABASE_URI] sqlite:///mydb.db app.config[SQLALCHEMY_TRACK_MODIFICATIONS] False db SQLAlchemy(app) class User(db.Model): id db.Column(db.Integer, primary_keyTrue) name db.Column(db.String(80), nullableFalse) email db.Column(db.String(120), uniqueTrue, nullableFalse) app.route(/api/users, methods[GET]) def get_users(): users User.query.all() return jsonify([{id: u.id, name: u.name, email: u.email} for u in users]) app.route(/api/users, methods[POST]) def create_user(): data request.get_json() new_user User(namedata[name], emaildata[email]) db.session.add(new_user) db.session.commit() return jsonify({id: new_user.id, name: new_user.name, email: new_user.email}), 201性能优化缓存from flask import Flask from flask_caching import Cache app Flask(__name__) app.config[CACHE_TYPE] SimpleCache app.config[CACHE_DEFAULT_TIMEOUT] 300 cache Cache(app) app.route(/api/data) cache.cached(timeout60) def get_data(): return jsonify({data: cached response})Gzip压缩from flask import Flask from flask_compress import Compress app Flask(__name__) Compress(app) app.route(/api/large-data) def large_data(): return jsonify({data: x * 10000})总结Flask为Python后端开发者提供了轻量级的Web开发框架。通过简洁的路由系统和丰富的扩展生态Flask使得快速构建API变得非常容易。从Rust开发者的角度来看Flask的灵活性与Rust的类型安全形成了有趣的对比。在实际项目中建议合理使用蓝图来组织代码并注意缓存和压缩来提升性能。