python测试开发django-60.token登录(TokenAuthentication)
- 2019 年 10 月 4 日
- 笔记
前言
现在很多接口项目在登录的时候返回一个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 HttpResponse({"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用户认证下篇再讲
