如何在你的Django网站中添加授权?


为了处理用户数据,我们首先使用会话跟踪数据,然后使用这些会话启用用户登录。允许开发者授权的 auth/auth 系统是一个术语,用于描述启用用户身份验证和授权的系统。

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

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

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

Django 的 auth/auth 系统有很多部分。所有这些部分都列在下面。

  • 用户 - 你的用户是注册了你网站的人。

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

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

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

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

权限和授权

授权检查经过身份验证的用户被允许在你的网站上使用什么。例如,你正在运行一个电子商务网站,并且拥有员工和客户作为你的用户角色。员工用户和客户用户的权限各不相同,为了维护这一点,使用了授权。

权限实质上允许开发者检查特定用户是否有资格执行他想要执行的特定操作。这可以通过权限和组来实现。

Django 配备了内置的权限系统,该系统将权限分配给特定用户或用户组。Django 管理员站点使用的权限如下:

  • 具有该对象类型“查看”或“更新”权限的用户可以访问查看对象。

  • 只有具有该项目类型“添加”权限的用户才能访问“添加”表单并添加对象。

  • 具有该项目类型“更改”权限的用户可以访问更改列表、“更改”表单以及更改对象的功能。

  • 只有具有该对象类型“删除”权限的用户才能访问删除它。

可以为不同类型的对象以及特定对象实例设置权限。这可以通过使用 has_add_permission()、has_view_permission()、has_change_permission() 和 has_delete_permission() 方法来完成。

这些方法在 ModelAdmin 类中提供,使用这些方法,可以自定义不同对象的权限。

#set user’s groups:
Myuser.groups =group_list

#to add or remove a user from a group the following commands can be used.
Myuser.groups.add(grp1,grp2)
Myuser.groups.remove(grp1,grp2)

#To add, remove and clear all permissions the following commands can be used.
Myuser.permissions=permission_list
Myuser.permissions.add(p1,p2,p3)
Myuser.permissions.remove(p1)
Myuser.permissions.clear()

所有上述命令通常都写在 views.py 文件中。在这个文件中,接收用户输入的信息,并对其进行身份验证和授权。

因此,上述代码应该理想地写在项目中的 views.py 文件中。

通常,会创建一个用于登录的应用程序和一个用于注册的应用程序。每个应用程序都有一个 views.py 文件。在登录和注册过程中分别对 views.py 文件中的用户进行身份验证和授权。

或者,如果你的项目有多个角色,例如客户、员工、管理员等,那么你将必须创建多个用户角色。这可以通过扩展 models.py 文件中的 AbstractUser 类来完成。

From django.contrib.auth.models import AbstractUser
Class User(AbstractUser):
   EMPLOYEE=1
   CUSTOMER=2
   ROLE_CHOICES=(
      (EMPLOYEE,’Employee’)
      (CUSTOMER,’Customer’)
   )
      models.PositiveSmallIntegerField(choices=ROLE_CHOICES, blank=True, null=True)

所有上述命令通常都写在 views.py 文件中。在这个文件中,接收用户输入的信息,并对其进行身份验证和授权。因此,上述代码应该理想地写在你的项目中的 views.py 文件中。

Django 中的权限

默认权限使用django.contrib.auth提供,它列在 settings.py 文件中的 INSTALLED_APPS 中。这将默认确保向项目中的所有模型授予添加、查看、更新和删除权限。

例如,你正在运行一个电子商务网站,你的网站的用户包括客户和员工,一个名为 review 的应用程序和一个名为 product 的模型。要检查用户是否具有关于该模型的权限,可以使用以下代码行。

User.has_perm(‘review.add_product’)
User.has_perm(‘review.remove_product’)
User.has_perm(‘review.delete_product’)
User.has_perm(‘review.view_product’)

为了检查用户是否具有特定权限,而不是单独检查所有权限,也可以使用以下方法:

From django.contrib.auth.decorators import permission_required
@permission_required(‘review.add_product’)
Def fun(request):
   ‘’’can raise error stating that permission is denied.’’’

或者

{% if perms.review.add_product %}

上面的代码行也可以用来检查用户是否具有权限。通过这种方式,可以在 Django 项目中实现授权。

更新于:2022年9月5日

769 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告