Django Middleware,登录后单一动作

时间:2014-02-14 15:11:12

标签: django python-2.7 login django-middleware

假设我创建了一个中间件,它应该在登录后使用LOGIN_REDIRECT_URL的“next”参数重定向用户。但它应该在记录后直接执行一次,而不是每次请求LOGIN_REDIRECT_URL。目前我检查User.last_login并将其与datetime.datetime.now()进行比较,但似乎不是一个合理的解决方案。有更好的想法吗?

2 个答案:

答案 0 :(得分:0)

也许您应该尝试使用user_logged_in信号而不是中间件?

此外,您可以从is_anonymous的请求中检查用户对象,也许可以帮助

答案 1 :(得分:0)

我设法解决了这个问题。我为user_logged_in操作创建了信号,即添加变量redirect_me=True。多数民众赞成我在中间件中仍然有相同的请求,我可以检查它并制作和redirct。这是一个示例代码:
signals.py:     来自django.contrib.auth.signals import user_logged_in

def do_stuff(sender, user, request, **kwargs):
    if getattr(request, 'user', None) and not request.user.is_superuser:
        request.do_stuff = True

models.py(您也可以将它放在 init .py或最初在'runserver'上运行的其他文件中):

from django.contrib.auth.signals import user_logged_in
user_logged_in.connect(do_stuff)

middleware.py:

class PrimordialAdvertMiddleware(object):

def process_response(self, request, response):
        if getattr(request, 'do_stuff', None):
            return do_some_other_stuff()
        return response

您也可以执行process_request操作。 我希望将来能帮到某人。

相关问题