【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)
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过期时间)的更多相关文章
- Django用户认证系统(二)Web请求中的认证
在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...
- 【django后端分离】Django Rest Framework之一般配置(简单剖析)
1:常设状态码 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent). 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成 ...
- 【django后端分离】rbac组件(文件源代码+使用)
1:用户,角色,权限,菜单表设计 from django.db import models # 用户菜单 class UserMenu(models.Model): title = models.Ch ...
- 【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式
1:设置mysql原生分页 # 监控系统首页显示分页 def MyPagination(limitid,offsetid): limitid =str(limitid) offsetid =str(o ...
- 前后端分离 之vue-cli 搭建项目mac 系统讲解
前端项目搭建必备技术 webpack nodejs 搭建 vue-cli 的安装 以上技术自行了解安装 一:创建前端项目 采用vue-cli 脚手架 1:终端执行如下命令 vue init webpa ...
- python django框架+vue.js前后端分离
本文用于学习django+vue.js实现web前后端分离协作开发.以一个添加和删除数据库书籍应用为实例. django框架官方地址:https://www.djangoproject.com/ vu ...
- 自定义Django认证系统的技术方案
Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求.自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换.本文就来介绍自定义Django认证系统的相关技术细节. 自定义认证 ...
- django认证系统 Authentication
Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...
- Django Authentication 用户认证系统
一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说 ...
随机推荐
- WinForm中Dispose()和Close()的区别
WinForm中Dispose()和Close()的区别 Close()会自动调用Dispose()方法,但是如果窗体是模态的,则不会调用 所以ShowDialog的时候,要用Dispose(),Sh ...
- 附录C 准备NCDC气象数据(加解释)
附录C 准备NCDC气象数据 这里首先简要介绍如何准备原始气象数据文件,以便我们能用Hadoop对它们进行分析.如果打算得到一份数据副本供Hadoop处理,可按照本书配套网站(网址为http://ww ...
- php缓存技术有哪些(总结)
php缓存技术有哪些(总结) 一.总结 一句话总结: 静态页面:全页面静态化缓存,页面部分缓存(将页面中不常变动的部分进行静态化缓存), 数据缓存:比如我的每轮的题目数据,商店,寻宝数据等 数据库:查 ...
- PAT甲级——A1025 PAT Ranking
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...
- JSP页面格式化timestamp时间
timestamp类型返回并直接取值显示会带小尾巴 偶然发现 <fmt:formatDate value="${order.createTime}" type="b ...
- 观察者模式(Observer、Subject、ConcreteSubject、ConcreteObserver)(监护、订阅)
建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应的作出反应. 在此发生改变的对象称之为观察目标(被观察者),而被通知的对象称为观察者,一个观察者目标可以对应多个观 ...
- 5+App 基于HTML、JS、CSS编写的运行于手机端的App(DCloud开发)
HTML5 Plus移动App(5+App) 工具: 开发工具HBuilder下载下载地址 开发工具HBuilderX下载下载地址(替代HBuilder) 框架: uni-app :是一个使用 Vue ...
- 2019-8-31-dotnet-控制台读写-Sqlite-提示-no-such-table-找不到文件
title author date CreateTime categories dotnet 控制台读写 Sqlite 提示 no such table 找不到文件 lindexi 2019-08-3 ...
- Dom直接选择器
Dom直接选择器 <!DOCTYPE html> <!--Dom间接选择器--> <html lang="en"> <head> & ...
- [转]js的垃圾回收机制
javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存.在编写javascript程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管 ...