40.TokenAuthentication认证
- TokenAuthentication是一种简单的基于令牌的HTTP认证
- 适用于CS架构,例如普通的桌面应用程序或移动客户端
# 将rest_framework.authtoken 添加到 INSTALLED_APPS
INSTALLED_APPS = (
'rest_framework.authtoken',
)
# 配置认证类
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
python manage.py migrate
'''
配置完成后需要运行迁移命令
rest_framework.authtoken实际是一个app或者说第三方模块,需要在数据库生成工作用的数据表
#为用户创建令牌
# 导包
from rest_framework.authtoken.models import Token
token = Token.objects.create(user='...')
print(token.key)
# 要进行身份验证的客户端,令牌密钥应包含在 authorization HTTP头部属性中
#键应该以字符串 "token" 作为前缀,用空格分隔两个字符串
# 示例
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
#成功认证后 TokenAuthentication 提供下面的属性
request.user :设置为一个Django的 User 类的实例
request.auth :设置为一个 rest_framework.authtoken.models.Token 的实例
# 认证失败返回 HTTP 401 Unauthorized 响应,并携带下面的HTTP头部信息
WWW-Authenticate: Token
#信号机制
'''
Django 内置了许多信号,允许用户的代码获得特定操作的通知。
例如在 Model 保存前触发的信号 pre_save、在 Model 保存后触发的信号 post_save 等
Django 中的信号主要包含以下三个要素:
发送者(sender):信号的发出方
信号(signal):发送的信号本身
接收者(receiver):信号的接收者
信号接收者其实就是一个简单的回调函数,将这个函数注册到信号上,当特定的事件发生时,发送者发送信号,回调函数被执行
Django 内置的信号,只需要定义回调函数并将它注册到信号上,这里的回调函数作为信号得接收者(receiver)。当程序执行到相应的操作时,自动触发信号,执行回调函数
'''
'''
如果希望每个用户都有一个自动生成的令牌
可以捕获用户的post_save信号
这个信号是Django原生提供的
'''
from django.conf import settings
from django.db.models.signals import post_save # 信号
from django.dispatch import receiver # 接收器
from rest_framework.authtoken.models import Token
# 绑定信号机制
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_Auth_token(sender, instance=None, created=False, **kwargs):
# 如果创建用户
if created:
# 创建令牌
Token.objects.create(user=instance)
'''
用户从客户端使用用户名和密码,往提供令牌服务的API发送表单或json数据
验证通过后,API将用户的令牌以json格式返回给客户端
DRF提供了一个内置的视图 obtain_auth_token 用于实现这一功能
'''
from rest_framework.authtoken import views
urlpatterns += [
path('api-token-auth/', views.obtain_auth_token),
]
40.TokenAuthentication认证的更多相关文章
- Django REST framework 之 API认证
RESTful API 认证 和 Web 应用不同,RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权 ...
- django使用RestFramework的Token认证
今天实现的想法有点不正规: Django Rest framework的框架的认证,API都运行良好. 现在是要自己写一个function来实现用户的功能. 而不是用Rest 框架里的APIVIEW这 ...
- <<google软件测试之道>>读书笔记
以前一直从开发的角度来看待测试,看完这本书以后感觉错了,难怪之前公司的测试一直搭建不起来 1.开发人员,开发测试人员,测试人员 * 开发人员负责开发 * 开发测试人员近距离接触代码,负责编写测试用例, ...
- Django Rest Framework 教程及API向导
Django Rest Framework 教程及API向导. 一.请求(Request)REST_FRAMEWORK 中的 Request 扩展了标准的HttpRequest,为 REST_FRAM ...
- django中的restful规范
基于django的原生restful规范 主路由:url.py from django.conf.urls import url, include from django.contrib import ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- DRF之权限和频率限制
一.权限 权限可以限制用户对视图的访问和对具体数据对象的访问. 在执行视图的dispatch方法前,会先进行视图访问权限的判断 在通过get_object获取对象时,会进行模型对象访问权限的判断 源码 ...
- Projected Coordinate Systems
Coordinate Systems Projected Coordinate Systems This is an archive of a previous version of the ArcG ...
- 【Python】理想论坛帖子读取爬虫1.04版
1.01-1.03版本都有多线程争抢DB的问题,线程数一多问题就严重了. 这个版本把各线程要添加数据的SQL放到数组里,等最后一次性完成,这样就好些了.但乱码问题和未全部完成即退出现象还在,而且速度上 ...
随机推荐
- Luogu2938 [USACO09FEB]股票市场Stock Market (DP,多重背包)
第n天不卖,视为卖了又原价买回 #include <iostream> #include <cstdio> #include <cstring> #include ...
- Luogu1502 窗口的星星 (线段树扫描线)
将每个点拓展为矩形,将\(y\)离散,延\(x\)轴扫描,每次更新最值 用了一百年的pushdown操作疑似有问题,亦或这道题特殊,我乱改了pushdown位置就过了,我能怎么办,WA了一发,y数组没 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Silk语言-中国人自己的开源编程语言
什么是Silk Silk语言是一门完全独立自主开发的跨平台动态类型编程语言,绝非"木兰"等套壳语言. Silk简单易学,30分钟即可掌握全部语法,让你像Python一样简单地写C/ ...
- 小k工具箱
个人开发软件 大小:21mb左右 基于JavaScript开发 支持系统:安卓/iOS/鸿蒙 未来可期上架各大应用市场 预览图 永久更新维护地址 官方讲解
- QQ高级功能
本篇文章为微信公众号:酿俗 教学内容请跟着小编一起探索吧! 第一步解锁微信豆影藏内容 随后下载需要的材料,注意!手机可能会提示有病毒!这里使用这些功能报病毒很正常 其实并没有病毒只是手机厂商的安全系统 ...
- java方法---递归
java方法递归 1.什么是递归 就是自己调用自己: 2.递归结构的两个部分 递归头:什么时候不调用自身方法.如果仅有头,将陷入死循环.递归体:什么时候需要调用自身方法.
- 第四十一篇:Vue生命周期(二)
好家伙,书接上回 上图:(Vue官网中Vue实例图片的下半张) 以下为解释: 5.1.1. mounted执行完后,表示整个Vue实例已经初始化完毕了; 此时,组件已经脱离了创建阶段;进入到运行阶段 ...
- 08_Linux基础-vim-tmux-字符编码
@ 目录 08_Linux基础-vim-tmux-字符编码 一. vim vim编辑器作用 vim模式 vim命令模式 vim编辑模式 vim末行模式 vim视图模式 vim替换模式 练习 vim常用 ...
- Linux虚拟机破解密码步骤
Linux破解密码 重启系统 到达logo界面快速 按 e 编辑当前条目 将光标移至以 linux 开头的行,此为内核命令行 在UTF-8(RHEL7):ro(RHEL8)后添加 rd.break ( ...