zoukankan      html  css  js  c++  java
  • 认证组件

    简介

    只有认证通过的用户才能访问指定的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')
    

    源代码流程

    见认证组件源代码分析

  • 相关阅读:
    子查询
    关联,分组练习
    共享锁(S锁)和排它锁(X锁)
    mac 搭建Vue开发环境
    移动端web开发
    负margin
    关于前端的margin
    清除的通用样式 css
    css布局
    <div class="clear"></div>
  • 原文地址:https://www.cnblogs.com/kp1995/p/10612639.html
Copyright © 2011-2022 走看看