利用自定义中间件实现请求状态机
通过Django中间件钩子构建有限状态机,管理请求生命周期内的状态流转。 · 难度:入门 · +10XP
请求状态机中间件设计
本教程将展示如何利用Django中间件的process_request和process_response钩子,构建一个轻量级有限状态机。不同于简单的用户认证或日志记录,该中间件能根据请求路径、方法及session状态,自动切换内部状态,并拒绝非法状态转换。例如:支付流程中,只有从'购物车'状态才能进入'确认'状态。你将学会编写状态定义、转换规则,并将其嵌入中间件。
class StateMachineMiddleware:
def __init__(self, get_response):
self.get_response = get_response
self.states = {'init', 'cart', 'checkout', 'paid'}
self.transitions = {
'init': ['cart'],
'cart': ['checkout'],
'checkout': ['paid']
}
def __call__(self, request):
current_state = request.session.get('state', 'init')
path = request.path_info
if path.startswith('/checkout/') and current_state != 'cart':
return HttpResponseForbidden('Invalid state transition')
# 其他状态判断逻辑...
response = self.get_response(request)
return response