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'] = token
return JsonResponse(csrf)

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

from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication #继承认证类 class Authtication(BaseAuthentication):
def authenticate(self, request):
try:
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({"code": 405, "error": "请求错误,请重新登录"}) # 判断登录是否有token
if not token:
raise exceptions.AuthenticationFailed({"code": 407,"error":"用户请求异常,未携带token"}) # 判断 token 正确或者是否过期
redis_token = sr.hget(username,"token")
if request_token != redis_token:
raise exceptions.AuthenticationFailed({"code": 405, "error": "请求错误,请重新登录"}) def authenticate_header(self, request):
pass

【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)的更多相关文章

  1. Django用户认证系统(二)Web请求中的认证

    在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...

  2. 【django后端分离】Django Rest Framework之一般配置(简单剖析)

    1:常设状态码 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent). 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成 ...

  3. 【django后端分离】rbac组件(文件源代码+使用)

    1:用户,角色,权限,菜单表设计 from django.db import models # 用户菜单 class UserMenu(models.Model): title = models.Ch ...

  4. 【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式

    1:设置mysql原生分页 # 监控系统首页显示分页 def MyPagination(limitid,offsetid): limitid =str(limitid) offsetid =str(o ...

  5. 前后端分离 之vue-cli 搭建项目mac 系统讲解

    前端项目搭建必备技术 webpack nodejs 搭建 vue-cli 的安装 以上技术自行了解安装 一:创建前端项目 采用vue-cli 脚手架 1:终端执行如下命令 vue init webpa ...

  6. python django框架+vue.js前后端分离

    本文用于学习django+vue.js实现web前后端分离协作开发.以一个添加和删除数据库书籍应用为实例. django框架官方地址:https://www.djangoproject.com/ vu ...

  7. 自定义Django认证系统的技术方案

    Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求.自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换.本文就来介绍自定义Django认证系统的相关技术细节. 自定义认证 ...

  8. django认证系统 Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  9. Django Authentication 用户认证系统

    一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说 ...

随机推荐

  1. java连接neo4j

    呼.博客要落灰了 记录一下Java连接neo4j的问题. 首先是neo4j的下载和配置,基本参考https://blog.csdn.net/appleyk/article/details/790918 ...

  2. 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整

    0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...

  3. 转载https://www.luogu.org/problemnew/solution/P1665,http://bailian.openjudge.cn/practice/2002/的新解法

    不知道为什么O(n^4)O(n4)的玄学方法能过,正解显然是O(n^2)O(n2)的,枚举对角线,然后算出另外两点判断存不存在. 关键就在怎么通过对角线算出另外两点的坐标. 先贴公式. int mid ...

  4. SPRINGBOOT配置事物注解和@MAPPER注意

    MAPPER接口要使用@Mapper注解,不能用@Compent @Repository,否则没有效果 一.开启事物 在启动类上加 @EnableTransactionManagement //如果m ...

  5. Unity 用代码设置UGUI的渲染层级

    用代码设置UGUI渲染无非和三个API有关: 1.SetAsFirstSibling(); 2.SetAsLastSibling(); 3.SetSiblingIndex(n) SetAsFirstS ...

  6. 微信小程序——tab导航栏

    wxml: <view class="tab">  <view class="tab-left" bindtap="tabFun&q ...

  7. python-基础-基础知识-变量-选择-循环

    1 基础知识 1.1 注释的分类 1.2 变量以及类型 变量定义 num1 = 100 #num1就是一个变量,就好一个小菜篮子 num2 = 87 #num2也是一个变量 result = num1 ...

  8. 2019-4-17-从-dotnet-core-3.0-的特性让-WPF-布局失效讨论-API-兼容

    title author date CreateTime categories 从 dotnet core 3.0 的特性让 WPF 布局失效讨论 API 兼容 lindexi 2019-4-17 1 ...

  9. GIL(全局解释器锁) 理解

    GIL 锁,全局解释器锁,作用就是,限制多线程同时执行,保证同一时间内只有一个线程在执行. ​ 线程非独立的,所以同一进程里线程是数据共享,当各个线程访问数据资源时会出现竞状态,即数据可能会同时被多个 ...

  10. SSM11-solr服务的搭建

    1.  Solr服务搭建 1.1. Solr的环境 Solr是java开发. 需要安装jdk. 安装环境Linux. 需要安装Tomcat. 1.2. 搭建步骤 第一步:把solr 的压缩包上传到Li ...