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. elasticsearch 中文API(一)

    Java API 这节会介绍elasticsearch支持的Java API.所有的elasticsearch操作都使用Client对象执行.本质上,所有的操作都是并行执行的. 另外,Client中的 ...

  2. linux 显示ip地址小工具-nali

    1.下载软件包 wget http://qqwry.googlecode.com/files/nali-0.1.tar.gz 2.安装 tar -zxvf nali-0.2.tar.gz cd nal ...

  3. Python学习之enumerate

         enumerate还可以接收第二个参数,用于指定索引起始值   2.     注意open返回文件对象,可迭代,而os.open返回的是文件指针,int类型, <wiz_tmp_tag ...

  4. bzoj4574:Zjoi2016线段树 dp

    传送门 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #includ ...

  5. 19-10-24-H

    H H H H H H ZJ一下: T1只会暴力,测试点分治. (表示作者的部分分并没有给够,暴力加部分表按测试点分类可以得60吧……) T2先直接手玩第一个子任务. 然后就$Find$了一个神奇的( ...

  6. [转]10 Tips for Learning a New Technology

    We live in a very exciting time. Never before has education been so cheaply available to the masses ...

  7. 装配SpringBean(一)--依赖注入

    所谓依赖注入,我觉得说白了其实就是给成员变量赋值,不管这个成员变量是基本类型还是引用类型,Spring中常用的依赖注入方式有两种: 1.构造器注入 2.setter注入 下面通过代码实例说明这两种注入 ...

  8. DOM4J -(XML解析包)

    DOM4J - 简介 是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM, ...

  9. IO流16 --- 对象流操作字符串 --- 技术搬运工(尚硅谷)

    序列化 @Test public void test12() throws IOException { ObjectOutputStream oos = new ObjectOutputStream( ...

  10. Ajax的简单基础

    什么是 AJAX ? AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行 ...