视图函数中加上认证功能,流程见下图
import hashlib import time def get_random(name): md = hashlib.md5() md.update(bytes(str(time.time()),encoding='utf-8')) md.update(bytes(name,encoding='utf-8')) return md.hexdigest() from rest_framework.views import APIView class Login(APIView): authentication_classes = [AuthLogin] def post(self, request, *args, **kwargs): response = {'status': 100, 'msg': None} name = request.data.get('name') pwd = request.data.get('pwd') user = models.User.objects.filter(name=name, password=pwd).first() if user: response['msg'] = '登陆成功' # 随机字符串可以是用户名加当前时间生成的mds token = get_random(name) # 如果有记录,就只需要更新,不需要重新插入 # models.UserToken.objects.create(token=token,user=user) # 查询 更新 # user_agent models.UserToken.objects.update_or_create(user=user, defaults={'token': token}) response['token'] = token else: response['status'] = 101 response['msg'] = '用户名或密码错误' return Response(response)
from rest_framework.permissions import BasePermission from rest_framework.exceptions import NotAuthenticated from app01 import models # BaseAuthentication class AuthLogin(BaseAuthentication): def authenticate(self, request): # 封装后的request token = request.GET.get('token') # print(token) ret = models.UserToken.objects.filter(token=token).first() if ret: return ret.user,token else: raise NotAuthenticated('您没有登陆')
在def initial(self, request, *args, **kwargs):函数中找到认证功能
流程总结:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Laravel中间件实现原理详解,包括了Laravel中间件实现原理详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Laravel的中间件实现原理。分享给大家供大家参考,具体如下: #1 什么是中间件? 对于一个Web应用来说,在一个请求真正处理前,我们可能会对请求做各种各样的判断,然后才可以让它继续传递到更深层次中。而如果我们用if else这样子来,一旦需要判断的条件
本文向大家介绍ReentrantLock实现原理详解,包括了ReentrantLock实现原理详解的使用技巧和注意事项,需要的朋友参考一下 以下是本篇文章的大纲 1 synchronized和lock 1.1 synchronized的局限性 1.2 Lock简介 2 AQS 3 lock()与unlock()实现原理 3.1 基础知识 3.2 内部结构 3
本文向大家介绍Java线程池FutureTask实现原理详解,包括了Java线程池FutureTask实现原理详解的使用技巧和注意事项,需要的朋友参考一下 前言 线程池可以并发执行多个任务,有些时候,我们可能想要跟踪任务的执行结果,甚至在一定时间内,如果任务没有执行完成,我们可能还想要取消任务的执行,为了支持这一特性,ThreadPoolExecutor提供了 FutureTask 用于追踪任务的
本文向大家介绍Python numpy多维数组实现原理详解,包括了Python numpy多维数组实现原理详解的使用技巧和注意事项,需要的朋友参考一下 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。今天就针对多维数组展开来写博客numpy其一部分功能如下: 1.ndarray,是具有矢量
本文向大家介绍详解 Java HashMap 实现原理,包括了详解 Java HashMap 实现原理的使用技巧和注意事项,需要的朋友参考一下 HashMap 是 Java 中最常见数据结构之一,它能够在 O(1) 时间复杂度存储键值对和根据键值读取值操作。本文将分析其内部实现原理(基于 jdk1.8.0_231)。 数据结构 HashMap 是基于哈希值的一种映射,所谓映射,即可以根据 key
本文向大家介绍详谈ServiceLoader实现原理,包括了详谈ServiceLoader实现原理的使用技巧和注意事项,需要的朋友参考一下 在java中根据一个子类获取其父类或接口信息非常方便,但是根据一个接口获取该接口的所有实现类却没那么容易。 有一种比较笨的办法就是扫描classpath所有的class与jar包中的class,然后用ClassLoader加载进来,然后再判断是否是给定接口的子