django 在其他应用程序中单击注销按钮时重定向至登录视图

cx6n0qe3  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(88)

我的Django项目中有两个应用程序:accountboards。在account中,我有loginlogout视图如下:

#account/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from .forms import LoginForm

def user_login(request):
    login_msg = ""
    if request.method == 'POST':
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            cleaned_data = login_form.cleaned_data
            user = authenticate(request,
                                username=cleaned_data['username'],
                                password=cleaned_data['password'])
            if user is not None:
                if user.is_active:
                    login(request, user)    
                    return redirect('boards:home_board')
    else:
        login_form = LoginForm()
    return render(request, 'account/login.html', {'login_form': login_form, 'login_msg': login_msg})

def user_logout(request):
    logout(request)
    return redirect('login')
#account/urls.py
from django.urls import path
from . import views

app_name = 'account'

urlpatterns = [
    path('login/', views.user_login, name='login'),
]

只有login模板,没有logout模板。目的是在logout事件发生时重定向回login模板。
在另一个应用程序boards中,在模板home_board中,有一个Logout按钮,如下所示:

home_board.html

<div id="nav-bar">&nbsp;
    <button id="logout-button" class="nav-bar-button">Logout</button>
</div>

单击此按钮时,如何通过JavaScript或内联onclick调用视图函数account/logout?这里没有url传递给onclick
请注意,如果我这样做:

<button id="logout-button" class="nav-bar-button" onclick="location.href='{% url 'account:login' %}'">
      Logout
</button>

它将重定向到登录视图,但用户实际上并没有注销。我需要用户注销(通过调用account/user_logout()

67up9zun

67up9zun1#

在您的account/urls.py中,为什么不添加logout视图,然后在单击按钮时引用该视图?

#account/urls.py
from django.urls import path
from . import views

app_name = 'account'

urlpatterns = [
    path('login/', views.user_login, name='login'),
    path('logout/', views.user_logout, name='logout'),
]

现在在您的home_board.html中:

<button id="logout-button" class="nav-bar-button" onclick="location.href='{% url 'account:logout' %}'">
      Logout
</button>

因为您的logout视图实际上会注销用户并将其重定向到登录页面。
此外,您还可以使用锚标记作为按钮.

<a class="nav-bar-button" id="logout-button" href="{% url 'account:logout' %}" role='button'></a>

相关问题