允许仅非登录用户访问Django

3 投票
1 回答
1767 浏览
提问于 2025-04-18 04:29

在Django中,我该如何防止已登录的用户访问某些页面呢?比如登录页面和注册页面。我想让已登录的用户无法进入登录和注册的页面。

一种方法是自己写一个登录的视图,在这个视图中检查用户是否已经登录,如果已经登录,就把他重定向到其他页面。

有没有更好的方法来实现这个呢?比如使用某种装饰器?

相关问题:

1 个回答

4

看看这个叫做 user_passes_test 的装饰器。

你可以这样做:

from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: not u.is_authenticated())
def my_view(request):
    ...

user_passes_test 接收一个函数。这个函数会接收一个用户对象(User object)。这个函数必须返回一个布尔值(true 或 false),用来判断是否应该执行这个视图(view)。

如果你不是用用户对象来验证用户,那你就需要自己写一个装饰器。

撰写回答