我正在学习如何联合测试Django中间件
在“旧式”中间件中,使用process_request()
加载中间件以测试结果非常容易。例如
def test_session(self):
request = self.factory.get('/')
session_middleware = SessionMiddleware()
session_middleware.process_request(request)
// Do stuff
然而,在“新风格”中,这并不存在。例如,我将如何测试下面的示例Django docs提供的内容
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tzname = request.session.get('django_timezone')
if tzname:
timezone.activate(pytz.timezone(tzname))
else:
timezone.deactivate()
return self.get_response(request)
使用TimezoneMiddleware(request)
将调用__init__
而不是__call__
如您所见,中间件只是实现了一个
__call__
魔术方法。这意味着该类的实例是可调用的旧式和新式中间件之间的区别在于,新中间件只是一个可调用的,返回一个可调用的-首先使用
get_response
回调调用它,然后使用实际请求调用返回的可调用get_response
是Django本身提供/注入的可调用函数,它是用于返回视图响应或链中的下一个中间件的函数因此,为了测试
SessionMiddleware
,您可以执行以下操作:相关问题 更多 >
编程相关推荐