Python 如何防止用户在已经登录时访问django中的登录页面?

Python 如何防止用户在已经登录时访问django中的登录页面?,python,django,django-login,Python,Django,Django Login,在我的django应用程序中,即使在登录之后,用户也可以通过URL访问登录/注册页面。如何防止他们访问这些页面 url.py 虽然我可以编写if-else语句来检查views.py中经过身份验证的用户,但我还没有使用任何函数来登录views.py。 我使用django的默认登录sysyem和authentication.py页面进行自定义登录(使用电子邮件地址进行身份验证) 身份验证.py 请向我推荐一种有效的方法,通过在浏览器上键入URL,在用户尝试访问登录或注册页面时,将已通过身份验证的用户

在我的django应用程序中,即使在登录之后,用户也可以通过URL访问登录/注册页面。如何防止他们访问这些页面

url.py

虽然我可以编写if-else语句来检查views.py中经过身份验证的用户,但我还没有使用任何函数来登录views.py。 我使用django的默认登录sysyem和authentication.py页面进行自定义登录(使用电子邮件地址进行身份验证)

身份验证.py


请向我推荐一种有效的方法,通过在浏览器上键入URL,在用户尝试访问登录或注册页面时,将已通过身份验证的用户重定向到主页。

您可以通过修改URL.py文件重定向用户,如下所示:

from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

app_name = 'account'

urlpatterns = [
  path('signup/', views.register, name='register'),
  path('', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
]
这将从登录页面重定向已通过身份验证的用户。
对于注册,您必须自定义注册函数,并添加一个“如果用户已通过身份验证”检查

您也可以使用此装饰器

def login_excluded(redirect_to):
    """ This decorator kicks authenticated users out of a view """ 
    def _method_wrapper(view_method):
        def _arguments_wrapper(request, *args, **kwargs):
            if request.user.is_authenticated:
                return redirect(redirect_to) 
            return view_method(request, *args, **kwargs)
        return _arguments_wrapper
    return _method_wrapper
然后在views.py中调用它

@login_excluded('app:redirect_to_view')
def someview(request):
    # ...

@Wasi如何指定重定向到它的路径?您可以使用
extra\u context
字典将重定向url作为
next
的值传递。有关更多信息,请查看django。
def login_excluded(redirect_to):
    """ This decorator kicks authenticated users out of a view """ 
    def _method_wrapper(view_method):
        def _arguments_wrapper(request, *args, **kwargs):
            if request.user.is_authenticated:
                return redirect(redirect_to) 
            return view_method(request, *args, **kwargs)
        return _arguments_wrapper
    return _method_wrapper
@login_excluded('app:redirect_to_view')
def someview(request):
    # ...