时间:2021-05-22
视图函数中加上认证功能,流程见下图
import hashlibimport timedef 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 APIViewclass 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 BasePermissionfrom rest_framework.exceptions import NotAuthenticatedfrom app01 import models# BaseAuthenticationclass 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):函数中找到认证功能
流程总结:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言开发平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用.DRF就为我们提供了一些频率限制的方法.DRF中的版本、认证、权限、频率组件的
Django中的csrf认证实现的原理调用process_view方法检查视图是否被@csrf_exempt(免除csrf认证)-去请求体或cookie中获取t
Django用户认证(Auth)组件Django用户认证(Auth)组件一般用在用户的登录注册上,用于判断当前的用户是否合法,并跳转到登陆成功或失败页面。Dja
DRF中的Request在DjangoRESTFramework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数
Pythondjango中我们经常用的response有django中的JsonResponse,HttpResponse,还有DRF中的Response在使用