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