首先我们需要了解Django的认证系统。Django的认证系统是很方便的,我们只需要在settings.py中设置好认证系统所需的基础配置,就可以使用Django提供的认证系统来进行用户注册、登录、登出、修改密码等操作。其中,login()函数用于登录已有账户,并将用户才能信息存储在用户浏览器的cookie或在服务端session中,方便后续的操作。
login()函数的作用
Django的login()函数可以将用户认证信息添加到request
对象中,方便后续的操作。login()函数包含以下两个参数:
- request:必须参数,表示浏览器或用户发来的请求,包含用户提交过来的数据;
- user:必须参数,表示再数据库中查询到的已有用户,可以通过authenticate()方法进行验证。
login()函数返回一个表示是否认证成功的布尔值。
使用方法
下面是login()函数的使用方法:
from django.contrib.auth import authenticate, login
# authenticate()用于验证用户
# login()用于登录已有用户
def my_view(request):
username = request.POST['username'] # POST请求用户名
password = request.POST['password'] # POST请求密码
user = authenticate(request, username=username, password=password) # 验证用户信息
if user is not None:
# 用户已通过验证且为活跃状态
if user.is_active:
login(request, user) # 登录用户
# 重定向到用户个人页面
return HttpResponseRedirect('/my_profile/')
else:
# 重定向到一个“帐户已禁用”错误页面
return render(request, 'disable_account.html')
else:
# 用户名/密码验证失败
return render(request, 'invalid_login.html')
在这个例子中,login()函数会为验证过的用户创建一个会话,以便在接下来的请求中使用。Django会自动管理会话,翻译用户的状态和其他相关信息。用户认证成功时,你可以使用request.user
属性来访问已经登录的用户对象。
实例1: 用户登录
下面是一个完整的用户登录示例,以帮助你了解login()函数的使用方法。假设我们有一个名为login_view
的Django视图,用于渲染登录页面。用户通过输入用户名和密码来登录,登录成功后会重定向到主页。
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def login_view(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': 'Invalid Username or Password.'})
else:
return render(request, 'login.html')
实例2: 使用login()函数来存储用户登录状态
在接下来的示例中,我们将展示如何使用login()函数来存储用户登录状态。假设我们有一个名为profile_view
的Django视图,用于渲染用户个人资料页面。只有登录成功后的用户才能访问这个页面。
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def profile_view(request):
user = request.user
return render(request, 'profile.html', {'user': user})
在这个示例中,我们使用Django提供的login_required
装饰器装饰了profile_view
视图。这样,只有已经登录的用户才能访问这个视图。如果访问这个视图时用户未被认证,则会重定向到登录页。如果用户已经被认证,我们就可以通过request.user
属性来访问已经登录的用户对象,并向模板传递用户对象。这样,模板就能够获取到登录用户的信息,进行展示或者其他处理操作。