认证组件

简介

只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件

局部使用

# models层

class User(models.Model):
    username=models.CharField(max_length=32)
    password=models.CharField(max_length=32)
    user_type=models.IntegerField(choices=((1,'超级用户'),(2,'普通用户'),(3,'二笔用户')))

class UserToken(models.Model):
    user=models.OneToOneField(to='User')
    token=models.CharField(max_length=64)
# 新建认证类

from rest_framework.authentication import BaseAuthentication
class TokenAuth():
    def authenticate(self, request):
        token = request.GET.get('token')
        token_obj = models.UserToken.objects.filter(token=token).first()
        if token_obj:
            return
        else:
            raise AuthenticationFailed('认证失败')
    def authenticate_header(self,request):
        pass
# view层

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

class Login(APIView):
    def post(self,request,*args,**kwargs):
        response={
            'status': 100,
            'msg': '成功'
        }
        try:
            name = request.data.get('name')
            pwd = request.data.get('pwd')
            user = models.User.objects.filter(
                name=name, pwd=pwd
            ).first()
            if user:
                token = get_random(name)
                # 使用update_or_create,妙处
                models.Token.objects.update_or_create(
                    user, defaults={'token': token}
                )
                response['msg']='登录成功'
                response['token']=token
            else:
                response['msg']='用户名或密码'
        except Exception as e:
            response['msg']=str(e)

        return Response(response)

class Course(APIView):
    # 认证类
    authentication_classes = [TokenAuthentication,]

    def get(self,request):
        return HttpResponse('get')

    def post(self,request):
        return HttpResponse('post')

源代码流程

见认证组件源代码分析

转载于:https://www.cnblogs.com/kp1995/p/10612639.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值