前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python测试开发django-60.token登录(TokenAuthentication)

python测试开发django-60.token登录(TokenAuthentication)

作者头像
上海-悠悠
发布2019-09-17 17:18:52
2.9K0
发布2019-09-17 17:18:52
举报

前言

现在很多接口项目在登录的时候返回一个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中加入配置参数

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    'rest_framework',
    'rest_framework.authtoken',
)

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

代码语言:javascript
复制
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编辑登录的视图函数

代码语言:javascript
复制
# 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设置访问地址

代码语言:javascript
复制
# 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用户认证下篇再讲

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • TokenAuthentication
  • 登录生成token案例
  • 测试登录获取token
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档