zoukankan      html  css  js  c++  java
  • python测试开发django-rest-framework-60.使用token登录(authentication之TokenAuthentication)

    前言

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

    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编辑登录的视图函数

    # views.py
    from django.shortcuts import render
    from django.http import JsonResponse
    from django.shortcuts import HttpResponse
    from rest_framework.authtoken.models import Token
    from django.contrib import auth
    from rest_framework.views import APIView
    
    # 作者:上海-悠悠,QQ交流群:750815713
    
    class LoginViewSet(APIView):
        '''登录方法'''
    
        def post(self, request, *args, **kwargs):
            username = request.data.get('username')
            password = request.data.get('password')
            user = auth.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设置访问地址

    # urls.py
    from apiapp import views
    from django.conf.urls import url
    
    # 作者:上海悠悠,QQ交流群:750815713
    
    
    urlpatterns = [
        url(r'^api/v1/login/$', views.LoginViewSet.as_view()),
    ]
    

    测试登录获取token

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

    测试结果

    登录成功后,token会写入authtoken_token表里面

    其它的接口需要登录之后才能访问,也就是token用户认证下篇再讲

  • 相关阅读:
    Python3 isidentifier() 方法
    Python partition() 方法
    Python format() 函数
    Python isdecimal() 方法
    Python zfill() 方法
    Python upper() 方法
    Python translate()方法
    windows上安装db2 spatial extender和ArcSDE的问题
    spring mvc上传、下载的实现
    spring mvc国际化(Local)和动态皮肤(Theme)功能
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11517213.html
Copyright © 2011-2022 走看看