面试题答案
一键面试- 定义中间件类:
- 首先,在Django项目的某个合适的Python文件(比如
middleware.py
)中定义中间件类。假设类名为LoggingMiddleware
。
import logging class LoggingMiddleware: def __init__(self, get_response): self.get_response = get_response self.logger = logging.getLogger(__name__) def __call__(self, request): # 请求处理前记录日志 self.logger.info('Request received: %s %s', request.method, request.path) response = self.get_response(request) # 响应处理后记录日志 self.logger.info('Response sent: %s', response.status_code) return response
- 首先,在Django项目的某个合适的Python文件(比如
- 实现相关方法:
__init__
方法:接收get_response
参数,这个参数是Django用于获取后续中间件或视图函数的响应的可调用对象。在这里初始化日志记录器self.logger
。__call__
方法:这个方法在每个请求进入时被调用。在调用get_response(request)
之前记录请求相关日志,在其之后记录响应相关日志,然后返回响应。
- 在项目中注册使用中间件:
- 在Django项目的
settings.py
文件中,找到MIDDLEWARE
列表。 - 将中间件类的路径添加到
MIDDLEWARE
列表中。例如,如果LoggingMiddleware
在myapp.middleware
模块中,添加如下内容:
MIDDLEWARE = [ # 其他中间件... 'myapp.middleware.LoggingMiddleware', # 其他中间件... ]
- 在Django项目的
这样就完成了符合要求的中间件的实现、定义和注册使用。 从设计模式角度,Django中间件本身类似责任链模式,每个中间件处理请求或响应后将控制权传递给下一个中间件,直到视图函数处理请求并返回响应,响应再沿着中间件链反向传递回去,各中间件对响应进行后续处理。