簡體   English   中英

在Django登錄后重定向用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM