在这一部分,我们将实现用户的登录和注销功能。
首先,我们需要为用户登录创建一个表单。在 blogproject/accounts/forms.py
文件中,添加以下代码:
from django import forms
from django.contrib.auth import authenticate, login
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return True
else:
return False
else:
return False
然后,我们需要在 blogproject/accounts/views.py
文件中添加登录视图:
from django.shortcuts import render, redirect
from .forms import LoginForm
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
if form.login(request):
return redirect('/')
else:
return render(request, 'accounts/login.html', {'form': form, 'error': 'Username or password is incorrect.'})
else:
form = LoginForm()
return render(request, 'accounts/login.html', {'form': form})
接下来,我们需要创建登录模板 blogproject/templates/accounts/login.html
:
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
<p style="color: red;">{{ error }}</p>
</form>
最后,我们需要在 blogproject/urls.py
文件中添加登录视图的 URL 映射:
from django.urls import path
from .views import user_login
urlpatterns = [
# ...
path('login/', user_login, name='login'),
]
用户注销的实现相对简单,我们只需要在 blogproject/accounts/views.py
文件中添加注销视图:
from django.contrib.auth import logout
def user_logout(request):
logout(request)
return redirect('/')
然后,在 blogproject/urls.py
文件中添加注销视图的 URL 映射:
path('logout/', user_logout, name='logout'),
现在,你可以通过访问 /login/
和 /logout/
来进行用户的登录和注销操作。