DRF的认证与权限功能
认证
1.全局配置
在setting.py进行配置。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
# 'rest_framework.authentication.BasicAuthentication', # 基本认证:账号密码认证
'rest_framework.authentication.SessionAuthentication', # session 认证
)
}
2.针对一个视图设置
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.views import APIView class ExampleView(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication)
...
使用方法
- request.user
- 认证通过: AbstractUser对象
- 未认证通过: AnonymousUser对象
request.user.is_authenticated(): 是否认证/登录通过
权限
权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。
- 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
在通过get_object()获取具体对象时,会进行对象访问权限的判断
提供的权限
- AllowAny 允许所有用户 (默认值,允许所有用户访问)
- IsAuthenticated 仅通过认证的用户
- IsAdminUser 仅管理员用户
- IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
无权限时两种可能的返回值:
- 401 Unauthorized 未认证
- 403 Permission Denied 权限被禁止
1.全局设置
在setting.py进行配置。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
# 四个选项,AllowAny、IsAuthenticated、IsAdminUser、IsAuthenticatedOrReadOnly
'rest_framework.permissions.IsAuthenticated',
)
}
2.针对一个视图设置
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView class ExampleView(APIView):
# 对于当前视图中的动作,必须登录后才能访问
permission_classes = (IsAuthenticated,)
...
自定义权限
在某些时候,需要要到自定义权限。例如一个视图里面有几个接口,查找全部部门,查找一个部门,修改一个部门。我们想针对修改一个部门这个接口设置权限。这时候需要自定义权限。
如需自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部
.has_permission(self, request, view)
是否可以访问视图, view表示当前视图对象
.has_object_permission(self, request, view, obj)
是否可以访问数据对象, view表示当前视图, obj为数据对象
具体操作如下:
class MyPermission(BasePermission):
"""自定义权限"""
def has_permission(self, request, view):
"""用户未登录不能修改部门"""
if view.action == 'update' and not request.user.is_authenticated():
return False
else:
return True class DepartmentViewSet(ListModelMixin,RetrieveModelMixin,UpdateModelMixin,GenericViewSet): # 使用自定义权限
permission_classes = [MyPermission] queryset = Department.objects.all()
serializer_class = DepartmentSerializer
DRF的认证与权限功能的更多相关文章
- DRF(4) - 认证、权限组件
一.引入 通过前面三节课的学习,我们已经详细了解了DRF提供的几个重要的工具,DRF充分利用了面向对象编程的思想,对Django的View类进行了继承,并封装了其as_view方法和dispatch方 ...
- DRF的认证、权限 和 限制
一.概述 认证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制.然后 权限 和 限制 组件决定是否拒绝这个请求. 简单来说就是: 认证确定了你是谁 权限确定你能不能访问某个接 ...
- DRF的认证,频率,权限
1,DRF的认证 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一 ...
- DRF比Django的认证和权限高在哪里
Django可以用LoginRequiredMixin和PermissionRequiredMixin给类视图添加认证和权限,DRF做了高级封装,提供了更简洁的实现方式.我们通过继续学习官网教程来进行 ...
- Django编写RESTful API(四):认证和权限
欢迎访问我的个人网站:www.comingnext.cn 前言: 按照前面几篇文章里那样做,使用Django编写RESTful API的基本功能已经像模像样了.我们可以通过不同的URL访问到不同的资源 ...
- Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)
前言: 前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时, 有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子. 我一不小心回了句:等回广州我再写篇文章 ...
- DRF 认证、权限、限制
DRF 认证.权限.限制 认证: 定义一个用户表和一个保存用户的Token表 # ======================day96======================= class ...
- DRF的版本、认证、权限
DRF的版本 版本控制是做什么用的, 我们为什么要用 首先我们要知道我们的版本是干嘛用的呢~~大家都知道我们开发项目是有多个版本的~~ 当我们项目越来越更新~版本就越来越多~~我们不可能新的版本出了~ ...
- DRF 版本、认证、权限、限制、解析器和渲染器
目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2. ...
随机推荐
- MySQL日常管理
DB2最佳分页语句 SELECT * FROM ( SELECT inner2_.*, ROWNUMBER() OVER(ORDER BY ORDER OF inner2_) AS rownumber ...
- c语言实现带LRU机制的哈希表
#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- 最快的Hash表算法
我们由一个简单的问题逐步入手:有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为 ...
- PokeCats开发者日志(六)
现在是PokeCats游戏开发的第九天的晚上,终于将这玩意提交到360移动开放平台进行审核了. 貌似很多平台都需要看这个著作权证明,得了,那我就话400块钱走一遍流程玩玩吧! 办理著作权还 ...
- HDU 6191 Query on A Tree(可持久化Trie+DFS序)
Query on A Tree Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Othe ...
- [NOI2017]游戏 2-sat
---题面--- 题解: 首先观察到,如果没有x的话,这就是一个2-sat问题. 建图方式:对于限制d1 c1 d2 c2,其中d1, d2分别代表比赛编号,c1, c2代表出场的赛车. 1,如果d1 ...
- 【NOIP模拟赛】 permutation 数学(打表)
biubiu~~~ 这道题卡读题卡得很死......首先他告诉我们读循环的时候要顺着圈读,然后又说这个圈在数列上要以最大数开始读,而且以这样的循环的首数排序,得到的序列与原序列一样那么他就是可行序列, ...
- BZOJ 2500 幸福的道路(race) 树上直径+平衡树
structHeal { priority_queue<int> real; priority_queue<int> stack; void push(int x){ real ...
- [poj 3693]后缀数组+出现次数最多的重复子串
题目链接:http://poj.org/problem?id=3693 枚举长度L,看长度为L的子串最多能重复出现几次,首先,能出现1次是肯定的,然后看是否能出现两次及以上.由抽屉原理,这个子串出现次 ...
- linux 学习好资源
Linux-Wiki.cn http://linux-wiki.cn/wiki/zh-hans/Linux%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84 Linux目录 ...