python - django 缓存统计在线人数,自写中间件总是提示:'ZxMiddleware' object is not callable

查看:350
本文介绍了python - django 缓存统计在线人数,自写中间件总是提示:'ZxMiddleware' object is not callable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

middle.py

from django.core.cache import cache


class ZxMiddleware(object):
    def __init__(self, values):
        self.online_ips = values
        
    # def __call__(self, request):
        # pass
        
    def process_request(self, request):
        if 'HTTP_X_FORWARDED_FOR' in request.META:
            ip = request.META['HTTP_X_FORWARDED_FOR']
        else:
            ip = request.META['REMOTE_ADDR']
        online_ips = cache.get("online_ips", [])
        if online_ips:
            online_ips = cache.get_many(online_ips).keys()
        cache.set(ip, 0, 15 * 60)
        if ip not in online_ips:
            online_ips.append(ip)
        cache.set("online_ips", online_ips)

在settings.py里

MIDDLEWARE = (
    ...其它的中间件
    'appb.middle.ZxMiddleware',
    
)

views.py 这里用

def get_online_count():
    online_ips = cache.get("online_ips", [])
    if online_ips:
        online_ips = cache.get_many(online_ips).keys()
        return len(online_ips)
    return 0

总是提示:

Traceback:

File "E:\python27\lib\site-packages\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

Exception Type: TypeError at /
Exception Value: 'ZxMiddleware' object is not callable

不知哪里有错?

解决方案

settings配置MIDDLEWARE_CLASSES,看你这里写的不对
另外你的__init__的values是干啥用的,在启用middleware的时候你在哪有传值?

这篇关于python - django 缓存统计在线人数,自写中间件总是提示:'ZxMiddleware' object is not callable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆