博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django REST framework 中的权限认证
阅读量:3907 次
发布时间:2019-05-23

本文共 1373 字,大约阅读时间需要 4 分钟。

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

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

开始:

前期的准备工作就不一一介绍了,详情可参考:

开始之前,确保我们已经有一个可以正常访问的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 permissionsclass 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: 

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

访问IP:1/

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

大功告成!!!

转载地址:http://ngren.baihongyu.com/

你可能感兴趣的文章
Azure 静态 web 应用集成 Azure 函数 API
查看>>
关于.NET5在IIS中部署的几个问题总结
查看>>
Wifi6网络
查看>>
真实经历:整整一年了,他是这样从程序员转型做产品经理的
查看>>
互联网时代供应链
查看>>
WPF 使用 Expression Design 画图导出及使用 Path 画图
查看>>
使用BeetleX访问redis服务
查看>>
.NET 应用如何优雅的做功能开关(Feature Flag)
查看>>
如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法
查看>>
从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图
查看>>
.NET应用如何优雅的实现功能定时开关
查看>>
netcore一键部署到linux服务器以服务方式后台运行
查看>>
从 3.1 到 5.0 —— OpenReservation 更新记
查看>>
还在犹豫是否迁移.NET5?这几个项目已经上线了!
查看>>
Kuma 1.0 GA发布,70多项新功能和改进
查看>>
被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
查看>>
ASP.NET Core使用HostingStartup增强启动操作
查看>>
结合控制台程序和K8S的CronJob完成定时任务
查看>>
2020了,最流行的密码依旧是123456
查看>>
网传不要升级.NET5的诸多原因,你赞同几个?
查看>>