加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【django后端分离】Django Rest Framework之认证系统之redis数据

发布时间:2020-12-15 17:09:17 所属栏目:大数据 来源:网络整理
导读:1:登录视图 redis_cli.py文件: import redis Pool= redis.ConnectionPool(host='localhost',port=6379,decode_responses=True) 登录视图文件: import redis from utils.redis_cli import Pool ? ?# 创建redis连接池 class UserLogin(APIView): """ 用户登

1:登录视图

redis_cli.py文件:
          import redis
          Pool= redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)

登录视图文件:
import redis
from utils.redis_cli import Pool ? ?# 创建redis连接池


class
UserLogin(APIView): """ 用户登陆认证: 登录成功更新token值,并且返回给前端,登录失败抛出异常提示 """ authentication_classes = [] # 登录接口不需要token认证 def post(self,request,*args,**kwargs): username = str(request.data.get("username")) 前端需要提交json格式 password = str(request.data.get(password")) try: csrf = {} user_obj = models.UserInfo.objects.filter(username=username,password=password).first() if not user_obj: csrf['code'] = 401 csrf[message'] = 账号或者密码错误" return JsonResponse(csrf) t = datamd5.md5(username) md5给token加密 token = t + :" + username token:username 加上用户名标识, sr = redis.Redis(connection_pool=Pool) sr.hset(username,token",token) 存入格式 sr.expire(username,10800) 3个小时过期 csrf['] = token return JsonResponse(csrf)

2:认证系统文件配置(token认证)

from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication 继承认证类


class Authtication(BaseAuthentication):
    def authenticate(self,request):
        :
            request_token = request.META.get(HTTP_AUTHENTICATE',"")
            print(request_token,request_token)
            token,username = request_token.split(")       登录视图设置的token有 :符号
            sr = redis.Redis(connection_pool=Pool)
        except Exception as e:
            raise exceptions.AuthenticationFailed({": 405,1)">error": 请求错误,请重新登录})

             判断登录是否有token
             token:
                ": 407,1)">":用户请求异常,未携带token 判断 token 正确或者是否过期
            redis_token = sr.hget(username,1)">if request_token != redis_token:
                })



     authenticate_header(self,1)">pass

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读