26 用户认证与权限之用户登录

在上一篇中,我们详细讲解了如何在Django中实现用户注册功能,包括数据模型、表单验证及用户的激活流程。在这一篇中,我们将重点关注用户的登录过程,帮助用户以验证身份的方式访问受保护的资源。在接下来的篇幅中,我们会通过示例演示如何实现用户登录功能,并确保与前后篇教程内容相互衔接。

登录功能概述

用户登录是任何需要身份验证的Web应用程序的重要组成部分。在Django中,用户登录主要涉及以下几个步骤:

  1. 创建用户登录表单。
  2. 验证用户凭证。
  3. 登录用户并重定向到相应页面。

创建登录表单

首先,我们需要创建一个登录表单。我们将使用Django内置的AuthenticationForm,这可以简化我们的工作,确保我们处理输入的用户凭证。创建一个新的表单类如下:

1
2
3
4
5
6
from django import forms
from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
username = forms.CharField(label='用户名', max_length=150)
password = forms.CharField(label='密码', widget=forms.PasswordInput)

在以上代码中,我们通过继承自Django的AuthenticationForm类来创建LoginForm

创建登录视图

接下来,我们需要创建一个视图来处理用户的登录请求。视图会处理GET和POST请求,根据凭证进行验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from .forms import LoginForm

def login_view(request):
if request.method == "POST":
form = LoginForm(request, data=request.POST)
if form.is_valid():
# 获取用户凭证
username = form.cleaned_data['username']
password = form.cleaned_data['password']
# 认证用户
user = authenticate(request, username=username, password=password)
if user is not None:
# 用户存在,登录
login(request, user)
return redirect('home') # 重定向到首页
else:
form.add_error(None, "用户名或密码错误")
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})

在该视图中,当用户提交表单时,我们首先验证表单的有效性。如果有效,我们使用authenticate方法来检查用户的凭证。如果认证成功,我们会调用login方法来登录用户,并重定向到主页面。

创建登录页面模板

接下来,我们需要一个HTML模板来显示登录表单。请在templates文件夹中创建一个login.html文件,并添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>用户登录</title>
</head>
<body>
<h2>用户登录</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">登录</button>
</form>
{% if form.non_field_errors %}
<div class="error">{{ form.non_field_errors }}</div>
{% endif %}
</body>
</html>

在此模板中,我们使用Django模板语言来渲染登录表单,并添加了CSRF保护。

更新URL配置

要使我们的视图可用,我们需要在urls.py中添加相应的URL配置:

1
2
3
4
5
6
from django.urls import path
from .views import login_view

urlpatterns = [
path('login/', login_view, name='login'),
]

这样我们就完成了登录功能的基础实现。

测试登录功能

现在我们可以在浏览器中访问/login/地址,尝试输入我们在上一部分中注册的用户名和密码。成功登录后,用户将被重定向到主页。

结论

在本篇中,我们实现了用户登录功能,确保用户凭证的验证和有效登录操作与之前的注册功能相辅相成。用户登录是身份验证的关键部分,确保了每一个用户有权限访问其允许的内容。

接下来的一篇文章中,我们将讲解如何对用户权限进行控制,确保只有经过授权的用户才能访问特定的视图和资源。希望你能继续关注!

26 用户认证与权限之用户登录

https://zglg.work/django-zero/26/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论