我的Django项目中有两个应用程序:account
和boards
。在account
中,我有login
和logout
视图如下:
#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">
<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()
。
1条答案
按热度按时间67up9zun1#
在您的
account/urls.py
中,为什么不添加logout
视图,然后在单击按钮时引用该视图?现在在您的
home_board.html
中:因为您的
logout
视图实际上会注销用户并将其重定向到登录页面。此外,您还可以使用锚标记作为按钮.