from django.utils.timezone import utc
import datetime
datetime.datetime.utcnow().replace(tzinfo=utc)#生成utf格林尼治时间
datetime.timedelta(days=14) 生成14天的日期格式的数字

import redis
import datetime
from app01 import models
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from django.utils.timezone import utc
redis_conn = redis.Redis(decode_responses=True) class TokenAuthenticate(BaseAuthentication):
def authenticate(self, request):
token = request.META.get("HTTP_TOKEN")
rds_token = redis_conn.get(token,1)#这里给个1 防止客户端发送请求是如果不携带token时,redis_conn.get(token)会返回一个None; ret = models.Token.objects.filter(key=token, ).first()这里就会报错
if rds_token:
print('缓存')
return rds_token,token
ret = models.Token.objects.filter(key=token, ).first()
if ret :
created_time = ret.created
# token剩余有效期时间
period_of_validity = datetime.timedelta(days=14) + created_time - datetime.datetime.utcnow().replace(
tzinfo=utc)
if period_of_validity > datetime.timedelta(days=3):#假如token有效期大于3天,在redis中设置token过期时间为3天对应的秒数
redis_conn.set(token,ret.user.username,ex=10)
elif period_of_validity < datetime.timedelta(days=3):
redis_conn.set(token,ret.user.username, ex=int(period_of_validity.total_seconds()))#,假如剩余时间不足三天把剩余天数转换成剩余秒数
else:
raise AuthenticationFailed('token过期')#假如已经没有剩余天数则直接报错,抛出token过期信息
print('数据库')
return ret.user,token
else:raise AuthenticationFailed('token过期')
 

django 时区设置 redis token缓存策略的更多相关文章

  1. django时区设置(timezone)

    django时区设置(timezone): 默认: TIMEZONE:'America/Chicago'(以前的版本,现在的版本默认的都是UTC时间.) Chicago时间,为UTC/GMT -6 小 ...

  2. Redis的缓存策略和主键失效机制

    作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略. >>EXPIRE主键失效机制 在Redis当中,有生存期的key被称为volatile,在创建缓存时,要为给定的key设置 ...

  3. django时区设置 media配置 日期截断函数 上传图片管理设计方案

    1.django时区 修改一下app里的设置 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True # 不用UTC时间 USE_TZ ...

  4. django时区设置以及全球用户如何各自显示当地时间

    在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...

  5. Django时区设置的郁闷

    第一次在windows下看到这个设置的时候,就设置成Ubuntu上时区设置的字符串“Asia/Shanghai”,结果报错通不过,最后记不清楚从哪儿查的,改成GMT+8. 最近把应用放到Linux上做 ...

  6. 设置Redis的LRU策略

    概念 LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种. maxmemory Redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小 ...

  7. django时区设置

    1. 创建web目录 django-admin.py startproject mysite 2. 启动web服务 python manage.py runserver python manage.p ...

  8. Django的时区设置问题

    1.Django的时区问题 django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题.之前程序在测试时是运行 ...

  9. Redis的过期策略和内存淘汰策略(转)

    Redis的过期策略 我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间.Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理. ...

随机推荐

  1. 【linux】基础知识

    为什么学习Linux? 服务器大多数都是linux操作系统,学习[上线][运维]是我们前端开发工程师的必备技能.Linux系统和maxOS系统十分类似,所以推荐大家使用max电脑工作. Linux的版 ...

  2. 弄懂promise

    ECMAscript 6 原生提供了 Promise 对象. Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来 ...

  3. vue安装scss,并且全局引入

    在写vue的css样式时,觉得需要css预处理器让自己的css更加简洁.适应性更强.可读性更佳,更易于代码的维护,于是在vue-cli脚手架采用scss.写过的人都知道,每写一个.vue文件都要在st ...

  4. lucene学习的小结

    pom.xml设置 <dependency> <groupId>junit</groupId> <artifactId>junit</artifa ...

  5. 主机服务绑定IP

    在用 netstat -na  查看当前主机提供的服务,例如显示如下结果: tcp        0      0 127.0.0.1:9000              0.0.0.0:*      ...

  6. WPF 之 调用线程必须为 STA,因为许多 UI 组件都需要

    WPF中,代码中准备控制控件内容时,有时会报错:“ 调用线程必须为 STA,因为许多 UI 组件都需要 ”. 如在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一 ...

  7. 搬运,B站up主『凉风有性胖次君』日日日日日日日日日日在校园

    这个视频超有毒,简直丧心病狂,我竟无言以对,凉风是有多大的耐性,搜集了这么多元素,哈哈哈~~~赶紧搬运,怕哪天B站都给封了 也就是说世界本来喜欢的是言叶,但是言叶爱上了一直在电车上暗恋她的诚哥,于是世 ...

  8. 【原创】大数据基础之Impala(1)简介、安装、使用

    impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...

  9. ionic3 安卓硬件返回

    platform.ready().then(() => { this.platform.registerBackButtonAction(() => { let activePortal ...

  10. make menuconfig 笔记

    由于公司对于新CPU开发很着急,似乎明年2月份就能达到量产的目标.之前只有2个人在做平台级的开发,于是就另外抽调人手,而我就在其中.我之所心搞openwrt是因为硬件部门的样机一直未有时间表,而我总不 ...