zoukankan      html  css  js  c++  java
  • dango框架学习:四十一.Token认证登录

    前言

    现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求。
    本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token。

    TokenAuthentication

    django rest framework权限和认证有四种方式:

    • BasicAuthentication 此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名。基本身份验证通常仅适用于测试
    • TokenAuthentication 此身份验证方案使用基于令牌的简单HTTP身份验证方案。令牌认证适用于客户端 - 服务器设置,例如本机桌面和移动客户端。
    • SessionAuthentication 此身份验证方案使用Django的默认会话后端进行身份验证。会话身份验证适用于与您的网站在同一会话上下文中运行的AJAX客户端。
    • RemoteUserAuthentication 此身份验证方案允许您将身份验证委派给Web服务器,该服务器设置REMOTE_USER 环境变量。

    本篇讲TokenAuthentication这种认证方式,先安装对应的模块

    pip install djangorestframework

    在setting.py中加入配置参数

    INSTALLED_APPS = (
        ...
        'rest_framework',
        'rest_framework.authtoken',
    )

    添加REST_FRAMEWORK项,rest_framework.authentication.TokenAuthentication上面说的第三种token认证的方式。

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.BasicAuthentication',
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.TokenAuthentication',  # token认证
        )
    }

    同步数据库,生成authtoken_token表

    python manage.py migrate

    执行完成后,数据库里面就会多一张authtoken_token表

    登录生成token案例

    登录可以直接用django自带的User表,所以不需要重新设计表了,登录的账号就是User表的数据,先准备几个登录的账号,比如我的登录账号是test,密码是123456

    views.py编辑登录的视图函数

    from rest_framework.authtoken.models import Token
    from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
    from django.contrib.auth import login,  logout, authenticate
    
    class LoginViewSet(APIView):
        '''登录方法'''    
        def post(self, request, *args, **kwargs):        
            username = request.data.get('username')        
            password = request.data.get('password')        
            user = authenticate(username=username,                 
            password=password)       
            if not user: 
                return JsonResponse({"code": 0,                               
                                                "msg": "用户名或密码不对!"})        
            # 删除原有的Token        
            old_token = Token.objects.filter(user=user)       
            old_token.delete()        
            # 创建新的Token        
            token = Token.objects.create(user=user)        
            return JsonResponse({"code": 0,                           
                                             "msg": "login success!",                            
                                             "username": user.username,                             
                                              "token": token.key})
                                                             

    urls.py设置访问地址

    urlpatterns = [
        url(r'^api/v1/login/$', views.LoginViewSet.as_view()),
    ]

    测试登录获取token

    接着测试登录返回token的接口,使用post请求,请求类型Content-Type: application/json

    响应结果:

     查看数据库auth_token表,存入对应·的·token值

     user_id对应auth_user表中id=13的用户

  • 相关阅读:
    跳表(SkipList)及ConcurrentSkipListMap源码解析
    动态主机配置协议DHCP
    电子邮件
    万维网WWW
    运维技巧(4):管理邮箱收发限制
    运维技巧(3):管理邮箱配额限制:重点是powershell命令操作
    运维技巧(2):创建邮箱方法详解
    运维技巧(1):如何通过邮件头和传输跟踪日志查看原始客户端IP
    管理客户端连接(6):客户端软件可以连接上邮箱
    配置Exchange 防病毒和反垃圾邮件(9)
  • 原文地址:https://www.cnblogs.com/liushui0306/p/13124250.html
Copyright © 2011-2022 走看看