Flask
Flask 是一个轻量级的 Python Web 框架,设计简单且灵活。以下是 Flask 处理一个前端请求的完整流程:
1. 客户端发送请求
客户端(如浏览器或移动应用)向 Flask 应用发送 HTTP 请求。请求可以是 GET、POST、PUT、DELETE 等方法之一。
2. 路由匹配
Flask 使用装饰器来定义路由。当请求到达时,Flask 会根据请求的 URL 和 HTTP 方法匹配相应的视图函数。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/items/<int:item_id>', methods=['GET'])
def read_item(item_id):
# 假设从数据库获取数据
item = {"item_id": item_id, "name": "Sample Item"}
return jsonify(item)
3. 请求对象
Flask 提供了一个全局的 request
对象,包含了请求的所有信息,如请求方法、URL、表单数据、JSON 数据等。
@app.route('/items', methods=['POST'])
def create_item():
data = request.json
# 处理数据
return jsonify(data), 201
4. 中间件(钩子函数)
Flask 通过钩子函数(如 before_request
、after_request
)来实现中间件功能。这些钩子函数可以在请求处理的不同阶段执行。
@app.before_request
def before_request_func():
print("Before request")
@app.after_request
def after_request_func(response):
print("After request")
return response
5. 视图处理
Flask 调用匹配的视图函数。视图函数负责处理请求逻辑,通常包括从数据库获取数据、处理表单、执行业务逻辑等。
6. 模板渲染(如果需要)
如果视图需要返回 HTML 页面,Flask 使用 Jinja2 模板引擎渲染模板。视图函数会将上下文数据传递给模板,模板引擎会生成最终的 HTML。
from flask import render_template
@app.route('/item/<int:item_id>')
def item_detail(item_id):
item = {"item_id": item_id, "name": "Sample Item"}
return render_template('item_detail.html', item=item)
7. 生成响应
视图函数返回一个响应对象,通常是 Response
或 jsonify
对象。Flask 将其转换为 HTTP 响应发送给客户端。
8. 返回响应给客户端
Flask 将生成的 HTTP 响应返回给客户端。客户端接收到响应后,可以根据响应数据进行相应的处理。
总结
Flask 的请求处理流程简单且灵活,适合构建小型和中型 Web 应用。它的轻量级设计使得开发者可以根据需要自由选择和集成第三方库。Flask 的路由和视图机制使得请求处理过程直观且易于理解。
Django
Django 处理一个前端请求的完整流程可以分为以下几个步骤:
1. 客户端发送请求
客户端(如浏览器或移动应用)向 Django 应用发送 HTTP 请求。请求可以是 GET、POST、PUT、DELETE 等方法之一。
2. URL 路由匹配
Django 使用 URLconf(URL 配置)来定义路由。当请求到达时,Django 会根据请求的 URL 匹配相应的视图函数或类视图。
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('items/<int:item_id>/', views.read_item, name='read_item'),
]
3. 中间件处理
在请求到达视图函数之前,Django 会通过一系列中间件。中间件可以用于处理请求和响应的各个阶段,如认证、会话管理、CORS 处理等。
# settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
4. 视图处理
Django 调用匹配的视图函数或类视图。视图负责处理请求逻辑,通常包括从数据库获取数据、处理表单、执行业务逻辑等。
# views.py
from django.http import JsonResponse
def read_item(request, item_id):
# 假设从数据库获取数据
item = {"item_id": item_id, "name": "Sample Item"}
return JsonResponse(item)
5. 模板渲染(如果需要)
如果视图需要返回 HTML 页面,Django 会使用模板引擎渲染模板。视图函数会将上下文数据传递给模板,模板引擎会生成最终的 HTML。
from django.shortcuts import render
def item_detail(request, item_id):
item = {"item_id": item_id, "name": "Sample Item"}
return render(request, 'item_detail.html', {'item': item})
6. 生成响应
视图函数返回一个 HttpResponse
对象,Django 将其转换为 HTTP 响应发送给客户端。响应可以是 JSON、HTML、XML 等格式。
7. 返回响应给客户端
Django 将生成的 HTTP 响应返回给客户端。客户端接收到响应后,可以根据响应数据进行相应的处理。
总结
Django 的请求处理流程是同步的,适合构建功能全面的 Web 应用。它提供了强大的 ORM、模板系统和管理后台,适合快速开发和部署复杂的 Web 应用。Django 的中间件和视图机制使得请求处理过程高度可定制。
FastAPI
1. 客户端发送请求
客户端(如浏览器或移动应用)向 FastAPI 应用发送 HTTP 请求。请求可以是 GET、POST、PUT、DELETE 等方法之一。
2. 路由匹配
FastAPI 使用路径操作装饰器(如 @app.get()
、@app.post()
)定义路由。当请求到达时,FastAPI 会根据请求的 URL 和 HTTP 方法匹配相应的路径操作函数。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
3. 请求参数解析
FastAPI 自动解析请求中的路径参数、查询参数、请求体等。它使用 Python 的类型提示和 Pydantic 模型来验证和解析这些参数。
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
async def create_item(item: Item):
return item
4. 依赖注入
FastAPI 支持依赖注入,可以在路径操作函数中注入依赖项。依赖项可以是数据库连接、配置对象等。
from fastapi import Depends
def get_db():
# 假设这是一个数据库连接
db = "database_connection"
try:
yield db
finally:
# 关闭数据库连接
pass
@app.get("/items/")
async def read_items(db=Depends(get_db)):
return {"db": db}
5. 执行路径操作函数
FastAPI 调用匹配的路径操作函数,传入解析后的参数和依赖项。函数可以是同步的,也可以是异步的。
6. 生成响应
路径操作函数返回的数据会被 FastAPI 自动转换为 JSON 格式的 HTTP 响应。FastAPI 使用 Pydantic 来序列化响应数据。
7. 中间件处理
在请求和响应的过程中,FastAPI 支持使用中间件来进行额外的处理,如日志记录、CORS 处理、认证等。
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
8. 返回响应给客户端
FastAPI 将生成的 HTTP 响应返回给客户端。客户端接收到响应后,可以根据响应数据进行相应的处理。
总结
FastAPI 的请求处理流程充分利用了 Python 的类型提示和异步特性,提供了高效、简洁的开发体验。通过自动生成的文档和强大的依赖注入机制,开发者可以快速构建和维护现代 Web API。
评论区