Python库的多样性使得它们可以在不同的应用场景中发挥作用,不同场景下同一个库可能拥有不同的功能,本系列未来会有不同的分类,可能会出现相同的库。数量很多,慢慢整理。文中的示例都是最基础的用法,有些就顺手写了,有些就丢给Ai,看个乐就行。
1. Django REST Framework (DRF) – Django 的 REST API 开发工具
功能: DRF 是一个强大的工具包,用于构建 RESTful API,提供序列化、认证、权限等功能。
使用场景:
- 构建 Django 基于的 REST API。
- 需要序列化、认证、权限控制的 API。
- 快速开发高质量的 API。
示例:
from rest_framework import serializers, viewsets from .models import Item class ItemSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Item fields = ['url', 'title', 'description'] class ItemViewSet(viewsets.ModelViewSet): queryset = Item.objects.all() serializer_class = ItemSerializer
2. FastAPI – 内置 OpenAPI 支持的高效框架
功能: FastAPI 是一个高性能的 Python 框架,用于构建 API,支持异步处理和自动生成 OpenAPI 文档。
使用场景:
- 需要高性能的 API 开发。
- 自动生成 API 文档。
- 与 Pydantic 数据验证结合的项目。
示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
3. Flask-RESTful – 为 Flask 添加 REST API 支持
功能: Flask-RESTful 是一个 Flask 扩展,简化了 RESTful API 的开发。
使用场景:
- 构建基于 Flask 的 REST API。
- 需要快速、简单的 API 开发。
- 资源路由和请求解析。
示例:
from flask import Flask
from flask_restful import Api, Resource, reqparse
app = Flask(__name__)
api = Api(app)
class Item(Resource):
def get(self, item_id):
return {"item": item_id}
api.add_resource(Item, '/item/<int:item_id>')
if __name__ == '__main__':
app.run(debug=True)
4. Flask-RESTPlus – 增强型 REST API 框架
功能: Flask-RESTPlus 是 Flask-RESTful 的增强版本,增加了自动生成 Swagger 文档的功能。
使用场景:
- 需要自动生成 API 文档的 Flask 项目。
- 构建基于 Flask 的 REST API 并提供详细的 API 描述。
- 需要增强版的 RESTful API 开发。
示例:
from flask import Flask
from flask_restplus import Api, Resource, fields
app = Flask(__name__)
api = Api(app, version='1.0', title='Sample API',
description='A simple demonstration of Flask-RESTPlus')
ns = api.namespace('items', description='Items operations')
item = api.model('Item', {
'id': fields.Integer(readonly=True, description='The item unique identifier'),
'name': fields.String(required=True, description='The item name')
})
@ns.route('/')
class ItemList(Resource):
@ns.doc('list_items')
@ns.marshal_list_with(item)
def get(self):
return []
@ns.route('/<int:id>')
@ns.response(404, 'Item not found')
@ns.param('id', 'The item identifier')
class Item(Resource):
@ns.doc('get_item')
@ns.marshal_with(item)
def get(self, id):
return {}
if __name__ == '__main__':
app.run(debug=True)
5. Connexion – OpenAPI 和 Swagger 支持
功能: Connexion 是一个 Python 框架,允许开发者使用 OpenAPI (Swagger) 定义来构建 REST API。
使用场景:
- 需要严格遵循 OpenAPI 规范的 API 开发。
- 自动生成 API 文档。
- 与 Swagger 工具集成。
示例:
from connexion import App
app = App(__name__, specification_dir='swagger/')
app.add_api('my_api.yaml')
if __name__ == '__main__':
app.run(port=8080)v
6. Graphene – 用于构建 GraphQL API 的库
功能: Graphene 是一个 Python 库,用于构建 GraphQL API,支持 Django 和 Flask。
使用场景:
- 构建 GraphQL API。
- 需要灵活的数据查询和变更的应用。
- 与 Django 或 Flask 集成。
示例:
import graphene
class Query(graphene.ObjectType):
hello = graphene.String(name=graphene.String(default_value="World"))
def resolve_hello(self, info, name):
return f'Hello {name}!'
schema = graphene.Schema(query=Query)
# 运行 GraphQL 服务器
from flask import Flask
from flask_graphql import GraphQLView
app = Flask(__name__)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))
if __name__ == '__main__':
app.run()
7. Ariadne – 现代 GraphQL 框架
功能: Ariadne 是 Python 的现代 GraphQL 框架,提供了一个简单、快速的 API 开发方式。
使用场景:
- 构建高效的 GraphQL API。
- 需要异步处理的 GraphQL 应用。
- 与 ASGI 服务器集成。
示例:
from ariadne import QueryType, gql, make_executable_schema
from ariadne.asgi import GraphQL
# Define types using Schema Definition Language (SDL)
type_defs = gql("""
type Query {
hello: String!
}
""")
# Initialize query
query = QueryType()
# Define resolvers
@query.field("hello")
def resolve_hello(_, info):
return "Hello, world!"
# Create executable schema
schema = make_executable_schema(type_defs, query)
# Create and run ASGI app
app = GraphQL(schema, debug=True)
8. PyGraphQL – 轻量级 GraphQL 实现
功能: PyGraphQL 是一个轻量级的 GraphQL 实现,旨在提供一个简单、快速的 GraphQL 服务。
使用场景:
- 需要快速、轻量级的 GraphQL 实现。
- 小型项目或原型开发。
- 与其他 Python 框架集成。
示例:
from pygraphql import GraphQL, QueryType, Field, String
schema = GraphQL(
QueryType(
Field('hello', String, resolver=lambda *args: 'Hello, World!')
)
)
# Run the server
from pygraphql.server import run_server
run_server(schema, host='localhost', port=8080)
9. Falcon – 轻量级、快速的 REST API 框架
功能: Falcon 是一个极简、轻量级的 WSGI 框架,专为构建快速、可扩展的 REST API 而设计。
使用场景:
- 构建高性能的 REST API。
- 微服务架构中的 API 开发。
- 需要低开销、快速响应的应用。
示例:
import falcon
class Resource:
def on_get(self, req, resp):
resp.media = {"message": "Hello, Falcon!"}
app = falcon.App()
app.add_route('/', Resource())
if __name__ == '__main__':
from wsgiref import simple_server
httpd = simple_server.make_server('localhost', 8000, app)
httpd.serve_forever()
10. Django Channels – 添加 WebSocket 和异步支持
功能: Django Channels 扩展了 Django,添加了实时功能,如 WebSocket、HTTP2 和异步处理。
使用场景:
- 需要实时通信的 Web 应用。
- 构建聊天应用或实时数据更新。
- 与 Django 生态系统集成。
示例:
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from django.urls import path
from myapp.consumers import MyConsumer
application = ProtocolTypeRouter({
"websocket": AuthMiddlewareStack(
URLRouter([
path("ws/myapp/", MyConsumer.as_asgi()),
])
),
})
	