django使用RestFramework的Token认证
今天实现的想法有点不正规:
Django Rest framework的框架的认证,API都运行良好。
现在是要自己写一个function来实现用户的功能。
而不是用Rest 框架里的APIVIEW这些,不涉及序列化这事。
那么,我们如何来实现这种情况下的token认证呢?
参考文档:
https://www.jianshu.com/p/078fb116236e
一,先写一个用于认证的类
from rest_framework.authentication import BaseAuthentication,TokenAuthentication
from rest_framework import exceptions
from rest_framework.authtoken.models import Token
from rest_framework import HTTP_HEADER_ENCODING
def get_authorization_header(request):
    auth = request.META.get('HTTP_AUTHORIZATION', b'')
    if isinstance(auth, type('')):
        auth = auth.encode(HTTP_HEADER_ENCODING)
    return auth
# 自定义的TokenAuthentication认证方式
class CustomTokenAuthentication(BaseAuthentication):
    model = Token
    def authenticate(self, request):
        auth = get_authorization_header(request)
        if not auth:
            return None
        try:
            token = auth.decode()
        except UnicodeError as e:
            msg = _('Invalid token header. Token string should not contain invalid characters.')
            raise exceptions.AuthenticationFailed(msg)
        return self.authenticate_credentials(token)
    def authenticate_credentials(self, key):
        try:
            token = self.model.objects.get(key=key[6:])
        except self.model.DoesNotExist as e:
            raise exceptions.AuthenticationFailed('auth fail.')
        return token.user, token
    def authenticate_header(self, request):
        return 'Token'
二,在调用及验证时,用如下方法:
def test_deploy(request):
    if request.method == 'POST':
        try:
            aa = TokenAuthentication()
            user_name, token = aa.authenticate(request)
        except Exception as e:
            print(e)
            result = {'return': 'fail', 'message': "auth fail."}
            return JsonResponse(result, status=403)
三,那我们在客户端的requests库调用代码如下:
url = "http://127.0.0.1:8000/deploy/test_deploy/"
mytoken = "xxxx0821232"
headers = {'Authorization': 'Token {}'.format(mytoken)}
payload = {'name': 'SxxxE'}
r = requests.post(url, data=payload, headers=headers)
print(r.status_code)
print(r.text)
由于,我们就可以在视图里进行认证,并进行业务逻辑处理,并自定义返回的东东~~
django使用RestFramework的Token认证的更多相关文章
- 【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)
		
1:登录视图 redis_cli.py文件: import redis Pool= redis.ConnectionPool(host='localhost',port=6379,decode_res ...
 - Django Rest framework 框架之认证使用和源码执行流程
		
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
 - Django 之 restframework 频率组件的使用
		
Django 之 restframework 频率组件的使用以及源码分析 频率组件的使用 第一步,先写一个频率类,继承SimpleRateThrottle 一定要在这个类里面配置一个scop='字符串 ...
 - python 全栈开发,Day97(Token 认证的来龙去脉,DRF认证,DRF权限,DRF节流)
		
昨日内容回顾 1. 五个葫芦娃和三行代码 APIView(views.View) 1. 封装了Django的request - request.query_params --> 取URL中的参数 ...
 - Django REST framework 之JWT认证
		
Json Web Token 1.JWT简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.JWT 可以使用 H ...
 - django rest_framework 实现用户登录认证
		
django rest_framework 实现用户登录认证 1.安装 pip install djangorestframework 2.创建项目及应用 创建过程略 目录结构如图 3.设置setti ...
 - Django(65)jwt认证原理
		
前言 带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗? 什么是JWT? 为什么要用JWT?它有什么优势? JWT的认证流程是怎样的? JWT的工作原理? 我们 ...
 - 42.JSON Web Token认证
		
JSON Web Token认证介绍 简称JWT认证,一般用于用户认证 JWT是一种相当新的标准,可用于基于token的身份验证 与内置的TokenAuthentication方案不同,JWT不需要使 ...
 - 基于Token认证的多点登录和WebApi保护
		
在文章中有错误的地方,或是有建议或意见的地方,请大家多多指正,邮箱: linjie.rd@gmail.com 一天张三,李四,王五,赵六去动物园,张三没买票,李四制作了个假票,王五买了票,赵六要直接F ...
 
随机推荐
- django中django.conf.urls.url函数
			
在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...
 - Java基础-IO流对象之字符类(FileWrite与FileReader)
			
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
 - 科学计算三维可视化---Traits(Event和button属性)
			
Event和button属性 是两个专门用于处理事件的change属性 Event属性和其他Trait属性不一样 Button属性是由Event属性继承而来的 Event监听 from traits. ...
 - myeclipse使用小结
			
1.项目设置编码格式 (1)全局编码设置:编码设置的方法:ToolBar-->Window-->Preferences-->General-->Workspace-->T ...
 - Redis学习二:Redis入门介绍
			
一.入门概述 1.是什么 Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内 ...
 - Metrics.NET实践(1)
			
起因:对应用的监控和测量是WEB应用的一个重要话题,尤其在监控错误率,并发量,以及框架库中的动态值.于是,在性能优化的时候找到了metrics.net. 简介 开始使用 度量 Gauges Count ...
 - Minicap使用分析
			
想起前段时间研究过的minicap,抱着无果的心情再次看了源码,这次竟然比上次清晰了一点点,难道是因为这两天被android源码折磨得身心疲惫然而却在不知不觉中增长了?不懂怎么样,看懂了大概. Min ...
 - [整理]SQL Server Reporting Services Charts
			
http://msdn.microsoft.com/zh-cn/library/aa964128.aspx#mainSectionhttp://msdn.microsoft.com/en-us/lib ...
 - Velocity VelocityEngine  支持多种loader 乱码问题
			
最近升级团队的代码生成工具,此工具是velocity实现的. 之前习惯使用UTF-8编码,现在团队使用GBK. 所以遇到一种场景,模板文件使用UTF-8(习惯了所有任性),输出文件使用GBK(项目需要 ...
 - 对string 的操作
			
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...