[英]Redirect User After Login in Django
我正在尝试实现我的登录页面,因此它可以重定向到网站中的特定页面。 当用户点击登录时,它检查用户是否是员工,然后将用户发送到管理页面,不是用户则停留在登录,如果是普通用户,则发送到普通用户页面。 我还没有完成LoginView,因为我只是想看看它是否可以在登录后直接进入管理页面。 我在网上进行了研究并尝试了许多不同的方法,但我不知道该怎么做。 我应该在 urls.py 或 LOGIN_URL/LOGIN_REDIRECT_URL 中更改或添加什么。 谢谢!
网址.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='index'),
path('output/', views.output, name="output"),
path('default_crawler/', views.default_page, name="default_page"),
path('admin_page/', views.admin_page, name="admin_page"),
path('regular_page/', views.regular_page, name="regular_page"),
path('pass_forgot/', views.pass_forgot, name="pass_forgot"),
path('pass_change/', views.pass_change, name="pass_change"),
path('pass_change_success/', views.pass_change_success,
name="pass_change_success"),
path('pass_found/', views.pass_found, name="pass_found"),
path('register/', user_views.register, name="register"),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
视图.py
def LoginView(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user.is_staff:
login(request, user)
return redirect('admin_page')
else:
messages.error(request, "Invalid username or password")
else:
messages.error(request, "Invalid username or password")
form = AuthenticationForm()
return render(request, 'users/login.html', {'form': form})
设置.py
LOGIN_URL
LOGIN_REDIRECT_URL
LOGIN_URL
是用于将用户重定向到登录页面的设置,例如,在使用login_required()
装饰器时。
LOGIN_REDIRECT_URL
用于在成功登录尝试后重定向用户。
但是, LOGIN_REDIRECT_URL
只允许一个重定向 URL,因此对于您的用例,我建议在登录视图中单独设置它。 但是,这省略了在请求中使用next
参数的功能,因此请注意,除非您特别添加,否则这是一种权衡。
我知道在 django 中登录/注销后重定向的两种方法:
1.您可以在html模板中登录/注销后重定向。 您只需要使用next
参数如下:
{% if user.is_authenticated %}
<a href="{% url 'logout' %}?next={% url 'app_name:after_logout' %}">{{ some_username }}</a>
{% else %}
<a href="{% url 'login' %}?next={% url 'app_name:admin_page' %}">Login</a>
{% endif %}
所以,如果你的员工是 admin 你会去admin_page
('admin_page/') 如果你想注销,你会去 name after_logout
页面(我刚刚编的)
或者
2.你需要添加到settings.py
LOGOUT_REDIRECT_URL = 'after_logout/'
LOGIN_REDIRECT_URL = 'admin_page/'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.