我试图将已经通过身份验证的用户重定向到主页,这样他们在登录时就无法访问登录页面。
这对我的注册页面来说很容易实现,因为它利用了views.py中的一个功能,但对登录页面来说似乎更难做到,因为它使用了django.contrib.auth.urls
(所以在views.py没有功能(
因此,我的问题是:如何在不使用视图功能的情况下将用户重定向到特定页面?在这种情况下,当用户已经登录时,mydomain.com/login/页面应该重定向到mydomain.com。
urlpatterns = [
path('admin/', admin.site.urls),
path('', homepage),
path('registration/', registration),
path('', include('django.contrib.auth.urls')),
]
在views.py
内部
from django.contrib.auth.decorators import login_required
@login_required
def myview(request):
return render(request,'mypage.html')
如果你想在主页上重定向用户,如果他们通过了身份验证,那么就做这个
创建名为decorators.py
的文件内部创建一个视图,该视图将处理经过身份验证的用户
def unauthenticated_user(view_func):
def wrapper_func(request, *args, **kwargs):
if not request.user.is_authenticated:
return view_func(request, *args, **kwargs)
else:
return redirect('/')
return wrapper_func
它将检查如果用户未通过身份验证,它将调用作为参数传递的函数,否则它将把用户重定向到主页
你不必在views.py
中导入decorator
从装饰器导入未经验证的用户
并在你的登录功能上调用它,就像这个
@unauthenticated_user
def login(request):
return render(request,"login.html")