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

最新文章

  1. [LeetCode] Arithmetic Slices II - Subsequence 算数切片之二 - 子序列
  2. PCIe 32GT/s 含义
  3. 【Leetcode】【Hard】Merge Intervals
  4. 用Qemu模拟vexpress-a9 (四) --- u-boot引导kernel,用nfs挂载根文件系统
  5. 云计算之路-阿里云上:2014年6月12日16:14遭遇SLB故障
  6. 用php输入表格内容
  7. 使用Java内存映射(Memory-Mapped Files)处理大文件
  8. C语言study一
  9. 数据库设主键以及where的应用
  10. 字符串(后缀自动机):Ahoi2013 差异
  11. Array数组方法的总结
  12. Linux下安装JRE
  13. sprinfmvc学习--01
  14. iOS 自动布局过程
  15. Mysql数据库读写分离Amoeba
  16. 最好的前端API备忘单整理
  17. [Abp 源码分析]五、系统设置
  18. 数位dp-入门模板题 hdu2089
  19. mac os app 开发
  20. XOR UVALive - 8512 -区间线性基合并

热门文章

  1. Python开发利器Pycharm
  2. 史上最直接小白式的Sourcetree的分支创建与合并
  3. nodejs + mySQL实践
  4. Delphi代码规范
  5. 分享一个百度大牛的Python视频系列下载
  6. MR过程解析(转自about云)
  7. spring源码学习之容器的扩展(二)
  8. c++新特性实验(4)声明与定义:右值引用(C++11)
  9. 【html、CSS、javascript-10】jquery-操作元素(属性CSS和文档处理)
  10. LUOGU P2441 角色属性树