django-rest-framework框架 第四篇 认证Authentication
认证Authentication
什么是身份认证
身份验证是将传入请求与一组标识凭据(例如请求来自的用户或与其签名的令牌)关联的机制。
视图的最开始处运行身份验证
在权限和限制检查发生之前,以及在允许继续执行任何其他代码之前,始终在视图的最开始处运行身份验证。
身份验证方案总是定义为类的列表
REST框架尝试对列表中的每个类进行身份验证,并将成功身份验证的第一个类的返回值赋值给request.user request.auth。 如果没有类身份验证,则request.user将设置为django.contrib.auth.models.anonymousUser的实例,request.auth将设置为none。
验证的执行过程
1、在APIView中重写 dispatch方法,方法最后有一段描述:
# Ensure that the incoming request is permitted 确保传入进来的
request是被允许的 self.perform_authentication(request) #执行验证
self.check_permissions(request) #检查全选
self.check_throttles(request) #检查阀门
2、def perform_authentication(self, request): request.user
这个方法只有这么一句话 获取user 其实这是Request类的一个user方法
3、@property
def user(self): 走到 def _authenticate(self):
方法 在这个方法中有 for authenticator in self.authenticators:
user_auth_tuple = authenticator.authenticate(self)
表示遍历我们设置的authentication_classes属性中的所有验证类列表,每个验证类都去执行类中的authenticate()方法。
BasicAuthentication(了解)
BasicAuthentication
此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名。基本身份验证通常只适用于测试。
如果验证成功,则basicauthentication提供以下凭据。
① request.user将是Django用户实例
② request.auth将为无
③ HTTP 401未经身份验证,
并带有适当的www-authenticate头。例如:www authenticate:basic realm=“api”
SessionAuthentication(了解)
此身份验证方案使用Django的默认会话后端进行身份验证。会话身份验证适用于与网站在同一会话上下文中运行的Ajax客户端。
如果验证成功,sessionauthentication将提供以下凭据。
① request.user将是Django用户实例。
② request.auth将为无。
③ 拒绝权限的未经身份验证的响应将导致HTTP 403禁止响应。
postman
Postman 是一个很强大的 API调试、Http请求的工具。 有chrome插件版, 有本地软件版,这里是有本地安装包安装。
认证类配置
局部配置 在具体的view类中写
authentication_classes = [BearerToken]
全局配置
在setting中配置
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
) }
TokenAuthentication
此身份验证方案使用简单的基于令牌HTTP身份验证。令牌身份验证适用于client-server分离的情况,如本机桌面和移动客户端。
如果验证成功,TokenAuthentication 将提供以下凭据。
① request.user将是Django用户实例。
② request.auth将是rest_framework.authtoken.models.Token实例。
③ 拒绝权限的未经身份验证的响应将导致HTTP 401 Unauthorized。
Token验证使用
使用步骤
① 把rest_framework.authtoken添加到INSTALLED_APPS中
② 把TokenAuthentication类写入authenticate_classes属性中
③ migration迁移数据库 因为会生成Token相关的数据表
④ 配置token的路由: from rest_framework.authtoken import views
path("api-token/", views.obtain_auth_token)
Token验证使用
获取Token key令牌 令牌要包含Authorization HTTP header Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
如果验证通过,TokenAuthentication 提供以下凭证:request.user Django自带的User模型实例
① request.auth rest_framework中的Token模型实例
② 验证失败,则返回HTTP 401 Unauthorized 并携带WWW-Authenticate 头信息
例如:WWW-Authenticate: Token
Token总结:
1、令牌的好处:避免在使用中不断的输入账号和密码,比较安全
2、如果要测试带token的接口,首先要进行登录,登录成功会有个token信息,向api接口发送请求的时候必须带上这个token,
故需要做2次请求(1,登录,拿到token 2,正式对接口进行测试)
自定义Token(重点)
继承BaseAuthentication
重写authenticate
返回return 两个值
续更 ...待续...
django-rest-framework框架 第四篇 认证Authentication的更多相关文章
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
- Django REST framework框架介绍和基本使用
Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...
- Django Rest Framework框架 ---- url控制器
Django Rest Framework框架 ---- url控制器
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- 【系统安全性】四、认证Authentication
四.认证Authentication 1.为什么要认证 对请求.数据进行认证,判断伪造的数据 HTTP请求很脆弱,抓包软件很强大,容易伪造身份,非法获取数据 2.摘要认证 对象:客户端参数.服务端响应 ...
- Django Rest Framework源码剖析(一)-----认证
一.简介 Django REST Framework(简称DRF),是一个用于构建Web API的强大且灵活的工具包. 先说说REST:REST是一种Web API设计标准,是目前比较成熟的一套互联网 ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- Django rest framework源码分析(一) 认证
一.基础 最近正好有机会去写一些可视化的东西,就想着前后端分离,想使用django rest framework写一些,顺便复习一下django rest framework的知识,只是顺便哦,好吧. ...
随机推荐
- hdu 3547 DIY Cube (Ploya定理)
DIY Cube Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total S ...
- centos 项目上线shell脚本
最近在弄项目上线,然后写了个上线,备份,回滚的shell脚本 上线可根据自己公司项目做相关操作,备份回滚可修改目录则可实现 主管要求用shell写,那就用shell写吧 本想Python写更好的 哈哈 ...
- quartz-misfire 错失、补偿执行
调度(scheduleJob)或恢复调度(resumeTrigger,resumeJob)后不同的misfire对应的处理规则 misfire产生的条件是:到了该触发执行时上一个执行还未完成,且线程池 ...
- C++ BigInteger模板
#include <cstdio> #include <cstring> #include <string> #include <iostream> # ...
- input file HTML控件控制
网页上添加一个input file HTML控件: 1 <input id="File1" type="file" /> 默认是这样的,所有文件类型 ...
- C++中友元类使用场合
在C++中我们可以將函数定义成类的友元函数,这样在函数中就可以访问类的私有成员.与函数相同,类也可以作为另一个类的友元类,在友元类中可以访问另外一个类的所有成员. 声明友元类的方法很简单,只需在类中写 ...
- 【RHEL7/CentOS7服务控制之systemctl命令】
Systemd对于Linux来说,就是一个init程序,可以作为sysVinit和Upstat的替代. RHEL7监控和控制Systemd的主要命令是systemctl,该命令可查看系统状态和管理系统 ...
- Python, Django 性能分析工具的使用
最近接手的 Apache HUE 项目性能出现了问题,线上经常出现响应时间过长或因为时间过长而无法服务等问题.老大让我准备弄个性能分析工具,便于追踪和分析平台当前的瓶颈出现在哪里. 那就搞起吧!先从代 ...
- Object-C初体验
前几周,看了书,标记了要Coding的例子.(书是写博客,CSDN送的,也可以用C币买) 周末,来搞几个例子. 2015年春,刚刚买Mac的时候,就搞了1个Object-C的HelloWorld,毕竟 ...
- xgboost参数调优的几个地方
tree ensemble里面最重要就是防止过拟合. min_child_weight是叶子节点中样本个数乘上二阶导数后的加和,用来控制分裂后叶子节点中的样本个数.样本个数过少,容易过拟合. su ...