Django REST framework 中的权限认证

目前,我们的API对谁可以编辑或删除代码段没有任何限制。我们希望有更高级的行为,以确保:

  • 代码片段始终与创建者相关联。
  • 只有通过身份验证的用户可以创建片段。
  • 只有代码片段的创建者可以更新或删除它。
  • 未经身份验证的请求应具有完全只读访问权限。

开始:

前期的准备工作就不一一介绍了,详情可参考:https://blog.csdn.net/qq_41590764/article/details/108824142

开始之前,确保我们已经有一个可以正常访问的api接口了!!!

第一步:配置settings.py

我们在settings中加入rest framework的相关配置

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        # 配置此项为,只有登录认证的管理员才可以访问数据
        'rest_framework.permissions.IsAdminUser',
        # 配置此项为,任何人都可访问数据,但只有管理员才可增加修改数据
        # 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

第二步:增加model模型

模型迁移:

python manage.py makemigrations
python manage.py migrate

第三步:修改urls.py增加登录接口

创建新用户:

python manage.py createsuperuser

用户名:admin

密码:admin123

登录后,就可以正常访问api接口了

第四步:修改序列化器

为让用户名更加直观,给序列化器增加以下内容

修改前:

修改后:

第五步:增加permissions.py

为了实现未经身份验证的请求只有只读权限,认证的身份具有可读可写权限

新建:permissions.py


from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    自定义权限只允许对象的所有者编辑它。
    """

    def has_object_permission(self, request, view, obj):
        # 读取权限允许任何请求,
        # 所以我们总是允许GET,HEAD或OPTIONS请求。
        if request.method in permissions.SAFE_METHODS:
            return True

        # 只有该数据的所有者才允许写权限。
        return obj.permission == request.user

第六步:修改views视图

这样就可以实现上述权限了,但发现post增加数据时,新增的表数据还存在问题

所以还要增加一个.save()方法

第七步:启动项目

访问IP:http://127.0.0.1:8000/api/ 

就可以访问所有数据,并看到数据的所属关系,并且利用post增加数据,会自动在permission中增加当前登录的用户

访问IP:http://127.0.0.1:8000/api/1/

如果数据是自己创建的就可以看到自己的数据,并可以修改数据,如果不是,就只有可读权限!!!

大功告成!!!

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务