每日python库:web开发(5)

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()),
])
),
})
上一篇
下一篇