如何在Django网站中添加身份验证?


在Web应用程序中,数据管理有两个关键要素。首先是从多个浏览器查询中保存获取的数据;其次是使用这些保存的数据来验证用户身份。会话允许我们跟踪跨多个浏览器查询的数据。等式的第二部分是使用这些会话登录用户。

我们不能相信人们就是他们声称的那个人,所以我们必须在过程中验证他们的身份。当然,Django包含执行这些和其他典型任务的工具。Django的用户身份验证系统管理用户帐户、组、权限和基于cookie的用户会话。身份验证/授权(auth/auth)系统是用于描述此系统的术语。

名称(auth/auth)表明处理用户通常是一个两步过程。

  • 针对用户数据库检查用户名和密码,以验证(身份验证)此人就是他或她声称的那个人。

  • 验证(授权)用户是否有权执行特定操作,通常是通过将用户的权限与表进行比较。

Django的auth/auth系统包含许多部分。所有这些部分都如下所示。

  • 用户 - 您的用户是已注册您网站的人。

  • 权限 - 这些是二进制(是/否)标记,指示用户是否允许执行特定任务。

  • - 一种以通用方式将标签和权限应用于多个用户的机制。

  • 消息 - 用户排队和查看系统消息的简单方法。

  • 个人资料 - 一种向用户对象添加自定义字段的方法。

Django身份验证将身份验证和授权组合到一个包中,称为身份验证系统,因为这些功能在某种程度上是相互关联的。

身份验证支持包含在django.contrib中,作为一个必须安装的Django应用程序。它默认情况下已安装,但如果您已卸载它,则需要使用以下步骤重新安装它。

验证会话框架是否已就位。当然,跟踪用户需要使用cookie,这就是使用会话框架的原因。

  • 将'django.contrib.auth'添加到您的INSTALLED_APPS配置后,运行manage.py syncdb。

  • 确保'django.contrib.auth.middleware.AuthenticationMiddleware'位于您的MIDDLEWARE_CLASSES设置中,位于SessionMiddleware之后。

验证用户

django.contrib.auth是一个提供身份验证功能的Django contrib模块。

必要的设置默认包含在django-admin startproject生成的settings.py文件中。

  • 您的INSTALLED_APPS设置中包含以下两项:

  • 'django.contrib.auth'中包含身份验证框架的核心和默认模型。

  • 'django.contrib.contenttypes'称为Django内容类型系统,它允许您将权限与您开发的模型关联。

以及您的MIDDLEWARE配置中的以下项目:

  • SessionMiddleware是一个跨请求管理会话的中间件。

  • AuthenticationMiddleware使用会话将用户与请求关联。

在这些设置就位的情况下运行命令manage.py migrate将为auth相关模型提供相应的数据库表,并为已安装应用程序中配置的任何模型提供权限。

Authenticate() 方法

我们可以使用authenticate()方法来验证一组凭据。它接收用户名和密码,并针对每个凭据进行身份验证检查。如果提供的凭据对后端有效,则返回用户对象。如果不是,则引发PermissionDenied错误,并返回None。

from django.contrib.auth import authenticate
user=authenticate(username=’john’,password=’passwordjohn’)
if user is not None:
   #backend has authenticated the given data
else:
   #no backend has authenticated the given data

上面提供的方法是一种低级身份验证方法。

下面可以看到登录期间用户输入数据身份验证的示例。

def login(request):
   if request.method == 'POST':
      name = request.POST['name']
      password = request.POST['password']

      user = auth.authenticate(username=name,password=password)
      if user is not None:
         auth.login(request,user)
         messages.info(request,'You Have Successfully LogedIn')
         return redirect('/')
      else:
         messages.info(request,'Invalid Details')
         return redirect('login')
   else:
      return render(request, 'login.html')

通过这种方式,可以对用户输入的数据执行身份验证。

更新于:2022年9月5日

636 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.