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. 第30月第6天 git log

    1. git log git log 96a6f18b1e0a1b7301cb4f350537d947afeb22bc -p -1 我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最 ...

  2. JSP起源

    JSP起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程 ...

  3. django中的反向解析

    1,定义: 随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超 ...

  4. (三)Java工程化--Git起步

    GIT学习参考:https://git-scm.com/book/zh/v2 版本控制 版本控制记录了一个或若干文件的历史变化,便于今后查阅,恢复. 三类版本控制系统 本地版本控制系统 RCS : 本 ...

  5. rest_framework框架的认识

    它是基于Django的,帮助我们快速开发符合RESTful规范的接口框架. 一  路由 可以通过路由as_view()传参 根据请求方式的不同执行对应不同的方法 在routers模块下 封装了很多关于 ...

  6. mac 电脑进入root用户

    一.使用命令:sudo su -:命令执行后输入密码

  7. jsonp跨域ajax跨域get方法

    原理: 就是利用<script >标签没有跨域限制的,从而达到与第三方网站通讯的目的.当需要通讯时,本站脚本创建一个<script>标签,src地址指向第三方网站的的一个网址. ...

  8. centos7.6编译安装php7.2.11及redis/memcached/rabbitmq/openssl/curl等常见扩展

    centos7.6编译安装php7..11及redis/memcached/rabbitmq/openssl/curl等常见扩展 获取Php的编译参数方法: [root@eus-api-cms-bac ...

  9. 关于PHP上传文件时配置 php.ini 中的 upload_tmp_dir

    在<PHP 5.3 入门经典>9.6.3 的试一试中(P235),给出了一个上传文件的例子,这里的文件格式为jpeg图片(image/jpeg).如果之前未配置 php.ini 中的 up ...

  10. zt 正则

    http://deerchao.net/tutorials/regex/regex.htm     正则表达式30分钟入门教程 版本:v2.3.5 (2017-6-12) 作者:deerchao 转载 ...