Django Rest Framework 电商项目 8-4 DRF的权限验证
2019-02-16 20:06
2006 查看
本节解决权限问题。
在DRF官方文档的API Guide中的Permissions中。Authentication是用户验证,Permissions是权限验证。有一些默认的权限验证,AllowAny、IsAuthenticated、IsAdminUser等等。
首先用户必须登录,在views.py中:
[code]from rest_framework.permissions import IsAuthenticated
在UserFavViewSet中添加逻辑:
[code]permission_classes = (IsAuthenticated, ) # 未登录会抛401
这样,如果是未登录的操作,会返回401。
除此之外,我们还需自定义一个permission,来判断用户所操作的数据是否是自己的记录。
在官方文档的Custom permissions中的Examples中给出了两个例子,一个是判定ip是否在白名单中,我们关心的是第二个用户权限的验证。
在utils中,新建一个permissions.py,然后将官文中的例子拷贝过去:
[code]from rest_framework import permissions class IsOwnerOrReadOnly(permissions.BasePermission): """ Object-level permission to only allow owners of an object to edit it. Assumes the model instance has an `owner` attribute. """ def has_object_permission(self, request, view, obj): # Read permissions are allowed to any request, # so we'll always allow GET, HEAD or OPTIONS requests. if request.method in permissions.SAFE_METHODS: return True # Instance must have an attribute named `owner`. return obj.user == request.user
这样,再在view中配置它,引入:
[code]from utils.permissions import IsOwnerOrReadOnly
改为:
[code]permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
此外,我们获取list的时候,不能获取所有用户的信息,只能获取当前的用户的数据,所以我们应该删除掉
[code]queryset = UserFav.objects.all()
而去重载get_queryset方法:
[code]def get_queryset(self): return UserFav.objects.filter(user=self.request.user)
解决之前的一个bug,用户收藏功能的model中的__str__应该返回:
[code]self.user.username
测试。
补充一点,BasicAuthentication是用户密码的认证模式。
我们应该将JWT的配置放在view中,而不是全局。token是会过期的,如果总是要每一个request都和用户绑定,会抛异常,一些公共页面也访问不了了。
删除settings.py中配置的
[code]'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
在views.py中:
[code]from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework.authentication import SessionAuthentication
然后配置:
[code]authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
相关文章推荐
- Django Rest Framework 电商项目 8-5 用户收藏功能与Vue联调
- django项目(天天生鲜电商项目)
- Django REST FrameWork中文教程4:验证和权限
- 用Django Rest Framework和AngularJS开始你的项目
- Django Rest framework之权限的实现示例
- django rest framework 之 权限
- Django 的DRF框架 Django rest Framework详解
- 基于控制权限和登录验证跳转的django登录界面的实现
- Vue+Django REST framework 打造生鲜电商项目
- Django REST Framework实现动态序列化数据及动态分配权限
- Django rest framework 权限操作(源码分析)
- 电商项目笔记之三:xml配置action的验证
- Django DRF项目中使用Elasticsearch搜索引擎的相关配置
- mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理
- Django中搜索引擎+订单并发+订单支付+用户权限+项目部署
- vue+djangorestframework打造前后端分离项目(一)之drf的ViewSet、router和跨域
- django项目培训站-17-用户登陆-自定义用户验证方式-错误提示信息传前端
- Django2.0-验证和授权(4)-权限
- Devise 给项目添加权限验证系统
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.1) 模块管理,验证权限,展示模块列表