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

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):

 

转载于:https://www.cnblogs.com/gukai/p/10780606.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值