我在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
答案 0 :(得分:1)
每次处理请求或响应时都会运行中间件。您无法有条件地执行它。也就是说,如果您的中间件类具有process_request
,process_response
等方法,则始终会调用它们。
尝试这样的事情:
class get_username(object):
def process_request(self, request):
if request.user.is_authenticated():
# ...
request.session['display_name'] = display_name
request.session.save()