• django 时区设置 redis token缓存策略


    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过期')
     
  • 相关阅读:
    浅谈iOS的SDK与API
    ulua-应用层模块编码
    ErlangRoad_2
    ErlangRoad_1
    Git笔记--git使用基本概念和术语
    小米Pro 15.6 系统重装记录
    Ubuntu14.04安装opencv2.4.13
    ubuntu配置机器学习环境(四) 安装intel MKL
    ubuntu配置机器学习环境(三) opencv 安装
    ubuntu配置机器学习环境(二) cuda 和cudnn 安装
  • 原文地址:https://www.cnblogs.com/16795079a/p/10765628.html
Copyright © 2020-2023  润新知