中间件(Middleware)是一个介入Django的请求和响应的处理过程中的钩子框架。 它是一个轻量级, 底层的“插件”系统, 用于在全局修改Django的输入或输出。中间件组件责任处理某些特殊的功能。
读以上这段话,可以得知中间件的定位
1.请求和响应处理过程中的钩子框架;
2.底层的“插件”系统
3.全局的,且能修改Request、Response的;
所以,中间件在Django中,可谓“权利很大”,使用得注意场景。更多的说明,烦请参考官文,我只是简单的写个例子,不过多说明,代码胜过一切言语。
class CommonMiddleware(object):
"""
将请求IP放入到django cache中,统计在线IP数
"""
def process_request(self, request):
if 'HTTP_X_FORWARD_FOR' in request.META:
ip = request.META['HTTP_X_FORWARD_FOR']
else:
ip = request.META['REMOTE_ADDR']
online_ips = cache.get('onlineips', [])
if online_ips:
online_ips = cache.get_many(online_ips).keys()
cache.set(ip, 0, 5 * 60)
if ip not in online_ips:
online_ips.append(ip)
cache.set('onlineips', online_ips)