from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from api.models import Token
import datetime
from django.core.cache import cache
import pytz class LoginAuth(BaseAuthentication):
def authenticate(self, request):
'''
1 对token设置14天有效时间
2 缓存存储
:param request:
:return:
'''
# print(request.META.get("HTTP_AUTHORIZATION"))
token=request.META.get("HTTP_AUTHORIZATION")
# 1 校验是否存在token字符串
# 1.1 缓存校验
user=cache.get(token)
if user:
print("缓存校验成功")
return user,token
# 1.2 数据库校验
token_obj = Token.objects.filter(key=token).first()
if not token_obj:
raise AuthenticationFailed("认证失败!") # 2 校验是否在有效期内
print(token_obj.created) # 2018-1-1- 0 0 0
now=datetime.datetime.now() # 2018-1-12- 0 0 0
now = now.replace(tzinfo=pytz.timezone('UTC'))
print(now-token_obj.created)
delta=now - token_obj.created
state=delta < datetime.timedelta(weeks=2)
print(state)
if state:
# 校验成功,写入缓存中
print("delta",delta)
delta=datetime.timedelta(weeks=2)-delta
print(delta.total_seconds())
cache.set(token_obj.key,token_obj.user,min(delta.total_seconds(),3600*24*7))
print("数据库校验成功")
return token_obj.user,token_obj.key
else:
raise AuthenticationFailed("认证超时!")

使用django 的cache设置token的有效期的更多相关文章

  1. 使用Django.core.cache操作Memcached导致性能不稳定的分析过程

    使用Django.core.cache操作Memcached导致性能不稳定的分析过程 最近测试一项目,用到了Nginx缓存服务,那可真是快啊!2Gb带宽都轻易耗尽. 不过Api接口无法简单使用Ngin ...

  2. Django 项目中设置缓存

    一.配置文件settings.py中 # 设置django缓存存放位置为redis数据库,并设置一个默认(default)选项,在redis中(配置文件/etc/redis/redis.conf)开启 ...

  3. Django 缓存 cache基本使用

    1.设置setting REDIS_HOST = '10.133.3.26' REDIS_POST = 6379 REDIS_DATABASE = 3 REDIS_PASSWORD = '' CACH ...

  4. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...

  5. Django分页器的设置

    Django分页器的设置 有时候在页面中数据有多条时很显然需要进行分页显示,那么在python中django可以这样设置一个分页处理 怎么样去设置呢? 我们要用到  Django  中的  Pagin ...

  6. Django’s cache framework

    小结: 1.缓存存储位置:数据库.文件系统.内存 2.通过缓存前缀实现跨服务器缓存 Django’s cache framework | Django documentation | Django h ...

  7. django的mysql设置和mysql服务器闲置时间设置

    服务器启动后,每个进程都会主动连接到mysql,要是长时间没有数据交互,mysql会自动断开连接. show variables like  '%timeout%'; 闲置连接的超时时间由wait_t ...

  8. django的cache

    使用文件缓存 #settings.py   CACHES = {   'default': {   'BACKEND': 'django.core.cache.backends.filebased.F ...

  9. ArcGIS Silverlight 设置token

    背景 arcgis for server采用多种安全认证方式.常用的就是就是采用token机制.所以对服务设置了安全,则前端需要提供相对应的token凭证.通常来说设置token有以下两种情形: 一是 ...

随机推荐

  1. oracle 11g不能导出空表的解决方法

    在oracle 11g r2中,发现传统的exp居然不能导出空的表,然后查询一下,  发现需要如下的步骤去搞,笔记之.    oracle 11g 新增了一个参数:deferred_segment_c ...

  2. Delphi XE2 之 FireMonkey 入门(11) - 控件居中、旋转、透明

    RotationAngle.RotationCenter.Opacity 属性继承自 TControl(FMX.Types), 这些新属性成了控件的基本功能. 先在 HD 窗体上添加 TRectang ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_6_Map集合遍历键值对方式

    增强for

  4. c#处理bin文件

    1. fs.Position  写入的位置,从哪个位置开始写 fs.Write(byte1,0,byte1.Length); byte1写入的byte[], 写入内容从第几位开始取,length取多长 ...

  5. Python笔记(二十五)_魔法方法_描述符

    描述符的属性方法 __get__(self, instance, owner): 用于访问属性,返回属性的值 __set__(self, instance, value): 用于给属性赋值时,返回属性 ...

  6. logstash异常

    logstash异常 1 2 3 Unrecognized VM option 'UseParNewGC' Error: Could not create the Java Virtual Machi ...

  7. Dynamic Programming and Policy Evaluation

    Dynamic Programming divides the original problem into subproblems, and then complete the whole task ...

  8. java对象的方法属性和代码块的加载顺序

    1.静态变量 2.静态代码块 3.局部代码块 4.构造函数 5.普通代码块 6.静态方法 7.普通方法 8.普通属性 for example: package com.JavaTest2; publi ...

  9. centos7安装配置jdk、tomcat

    centos7安装jdk1.8 1.新建文件夹java,上传文件jdk-8u111-linux-x64.tar.gz到java文件夹 2.解压tar包: tar -zxvf jdk-8u111-lin ...

  10. 事件 on emit off 封装

    /* on 绑定 emit 触发 off 解绑 //存放事件 eventList = { key:val handle:[] } 1对多 on(eventName,callback); handle: ...