Django的login()
函数是用于用户认证的函数,主要用于登录。该函数接收两个必要参数:请求对象和用户对象,以及一个可选的参数,即后端参考表名称。
该函数的作用是将认证后的用户信息保存到会话中。登录成功并返回HttpResponseRedirect时,会在HttpResponseRedirect中设置session cookie,该cookie中包含用户ID和哈希值,用于在后续请求中识别已经登录的用户。
以下是该函数的使用方法的完整攻略:
参数
def login(request, user, backend=None)
request
:必需,请求对象。user
:必需,表示登录的用户。若用户不存在,则调用方应在解释底层的用户身份验证功能后尝试创建用户。backend
:表示要使用的身份验证后端的名称。
实现
在实现中,需要引入login()
函数和render()
函数。login函数为Django自带的函数,render函数则是从Django.shortcuts模块中导入。
代码示例:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
return render(request, 'login.html',{'error':'用户名或密码错误'})
return render(request, 'login.html')
user_login
函数接受POST请求。当登录表单提交时,函数从请求对象中获取用户名和密码。函数使用Django内置函数 authenticate()
验证用户凭据。如果用户存在且输入的密码与库中存储的密码匹配,则 authenticate()
函数将返回验证的用户对象。在这种情况下,该函数还调用 login()
函数将认证的用户信息保存到会话中,并返回 redirect()
函数以将用户重定向到 home
页面。如果没有验证的用户对象,则该函数重新渲染具有错误消息的 login.html
模板。如果函数收到GET请求,则渲染表单并将其返回给用户进行输入。
示例
下面提供了两个实例说明。
示例 1
为了说明login()
函数的使用方法,下面使用一个基本的示例。首先要确保您已经使用django.contrib.auth
应用配置了认证系统,并定义了简单的 User
模型。
在视图中,需要使用 authenticate
和 login
函数。假设在 login
页面上有一个HTML表单,其中包含用户名 username
和密码 password
字段。user_login
视图将从表单中获取这些值并传递给 authenticate
函数。
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from django.shortcuts import render, redirect
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
return render(request, 'login.html', {'error': '用户名或密码错误'})
return render(request, 'login.html')
当用户提交登录表单时,会调用user_login
函数。函数从请求对象中获取用户名和密码。函数使用Django内置函数 authenticate()
验证用户凭据。如果用户存在且输入的密码与库中存储的密码匹配,则 authenticate()
函数将返回验证的用户对象。在这种情况下,该函数还调用 login()
函数将认证的用户信息保存到会话中,并返回 redirect()
函数以将用户重定向到 home
页面。如果没有验证的用户对象,则该函数重新渲染具有错误消息的 login.html
模板。
示例 2
下面是另一个示例,展示如何在 Django LoginView
中使用 login
函数。
from django.contrib.auth import login
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
class UserLoginView(LoginView):
template_name = 'login.html'
success_url = reverse_lazy('home')
def form_valid(self, form):
response = super(UserLoginView, self).form_valid(form)
login(self.request, self.get_user())
return response
使用Django LoginView
时,您需要在您的URLconf
文件中定义URL模式并指定要使用的视图。LoginView
将重定向到success_url
属性定义的位置,并为用户保存cookie。
在示例中,UserLoginView
继承 LoginView
。 我们使用 reverse_lazy
生成要重定向到的URL 。然后我们重写 form_valid
方法以在处理表单时调用login
函数。form_valid
方法是LoginView
的默认实现,用于处理表单验证,用于分离验证和认证逻辑,当表单验证通过时调用 login
函数。