Django仅在用户登录时调用自定义中间件

时间:2014-05-21 10:37:24

标签: django django-middleware

我在settings.py文件中安装了自定义中间件,如下所示。我的问题是,只有当用户登录时才能调用这个中间件。只有当用户登录时,我才能摆脱custom middleware get_username中的try / catch块。如何解决这个问题?

settings.py

MIDDLEWARE_CLASSES = (
  ....
  ....
  'custom.api.get_username'
)

INSTALLED_APPS = (
  ....   
  'custom',

定制/ api.py

class get_username(object):
   def process_request(self, request):
     try:
        userprofile.objects.get(request.id)
        ....
        .... 
        request.session['display_name'] = display_name
        request.session.save()
    except:
        pass

1 个答案:

答案 0 :(得分:1)

每次处理请求或响应时都会运行中间件。您无法有条件地执行它。也就是说,如果您的中间件类具有process_requestprocess_response等方法,则始终会调用它们。

尝试这样的事情:

class get_username(object):

   def process_request(self, request):
       if request.user.is_authenticated():
           # ...
           request.session['display_name'] = display_name
           request.session.save()