首页 > 其他 > 详细

DRF框架之认证组件用法(第四天)

时间:2019-04-27 22:07:39      阅读:183      评论:0      收藏:0      [点我收藏+]

1. 什么是drf 框架的认证组件: auth 就等于是jango中的Auth模块,Auth是自带session信息,但是 drf的认证组件可以自定义token携带过去,去判断用的

2.如何实现认证呢?

技术分享图片
from rest_framework.authentication import BaseAuthentication
from app01 import models
from rest_framework.exceptions import AuthenticationFailed
class MyAuthetication(BaseAuthentication):
    #重写这个方法
    def authenticate(self,request):
        #认证相关的东西

        #如果token信息放到请求头中,如何取?
        # request._request.META
        # token=request.META.get(‘token‘)

        # 校验该次请求是否携带正确的token
        #取出token
        token=request.GET.get(token)
        #校验该次请求是否携带正确的token
        ret=models.UserToken.objects.filter(token=token).first()
        if ret:
            #正常通过认证的用户
            #ret.user 当前登录用户
            return ret.user,token
            # return None
        else:
            #没有登录或者非法用户
            raise AuthenticationFailed(您没有通过认证)
判断用户登录携带的token是否正确

 

3. 如何在登录的时候加载认证信息处理是否是正常的用户

技术分享图片
#写登录接口
class Login(APIView):
    #全局使用的局部禁用
    authentication_classes = []
    def post(self,request):
        response={status:100,msg:None}
        name=request.data.get(name)
        pwd=request.data.get(pwd)
        #去数据库校验该用户是否存在
        user=models.User.objects.filter(name=name,pwd=pwd).first()
        if user:
            #正常用户登录成功
            #返回一个唯一的随机字符串
            token=uuid.uuid4()
            #把生成的随机字符串存到数据库中
            # 这样不行,因为每次登录都会新插入一条
            # models.UserToken.objects.create(user=user,token=token)
            # 先去数据库中查询,如果当前用户存在记录,更新token,如果不存在,新增一条
            # 根据user取查询,如果查到数据,更新defaults中的数据,如果查不到,新增一条数据
            ret=models.UserToken.objects.update_or_create(user=user,defaults={token:token})
            response[msg]=登录成功
            response[token]=token
        else:
            #用户名或密码错误
            response[status] = 101
            response[msg] = 用户名或密码错误
        return Response(response)
简单的登录加载认证处理

 

4. 如何全局使用呢?

# 认证的全局配置
REST_FRAMEWORK={
    DEFAULT_AUTHENTICATION_CLASSES:[app01.MyAuth.MyAuthetication,],

}

 

5. 如何全局禁用,局部使用呢?

#写登录接口
class Login(APIView):
    #全局使用的局部禁用
    authentication_classes = [MyAuthetication]
    def post(self,request):

 

DRF框架之认证组件用法(第四天)

原文:https://www.cnblogs.com/gukai/p/10780606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!