自动化测试平台(二):开发用户认证接口

x33g5p2x  于2021-12-30 转载在 其他  
字(2.3k)|赞(0)|评价(0)|浏览(362)

一、前言

对于一个系统来讲,用户模块是非常基本且重要的。搭建的测试平台也需要对用户、用户权限等进行管理。下面为你讲解如何通过DRF来快速的做一个用户登录的验证接口。

完整教程地址:《从0搭建自动化测试平台》

项目在线演示地址:http://121.43.43.59/ (帐号:admin 密码:123456)

二、验证登录讲解

1)创建用户

进入django的项目目录,执行下面的命令进行用户的创建:

python manage.py createsuperuser --email admin@example.com --username admin

按照提示一步一步设置用户的密码和其他信息即可:

用户创建成功后,会在数据库的auth_user表中看到该用户的记录:

2)开发登录接口

1)django项目目录结构创建

在django项目根目录下执行如下命令,创建一个用户相关的app:

django-admin startapp user

2)注册app到配置项中

user加入settings.py中的INSTALLED_APP列表中,完整的INSTALLED_APP内容如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user',
    'rest_framework',
    'rest_framework.authtoken'
]

3)定义接口说明

对于我们这个登录接口而言,需要用户传递两个参数:用户名、密码 ,接口路径和传参要求如下:

接口地址:/user/login

请求方法: POST

传参要求:

{
    "user_name":"admin",
    "password":"123456"
}

4)开发接口

接口说明给出后,我们就可以开发对应的接口了,在views.py 文件中输入如下代码:

from django.contrib.auth import authenticate
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.authtoken.models import Token

@api_view(['POST'])  # 列表中的元素代表支持哪些请求方法
def login(request):
    """ 登录接口 """
    # 验证用户帐号密码的内置方法
    user = authenticate(username=request.data['username'], password=request.data['password'])
    if user:
        Token.objects.filter(user_id=user.id).delete()  # 删除原来的token
        token = Token.objects.create(user=user)  # 创建新的token
        return Response(data={'msg': '登录成功!', 'token': token.key})  # 返回登录信息及token
    return Response(data={'msg': '用户名或错误!'}, status=status.HTTP_401_UNAUTHORIZED)

5)指定路由url

1.在user文件夹新增文件urls.py,并增加如下代码:

from django.urls import path
from user.views import login

app_name = "accounts"

urlpatterns = [
    path('login', login),  # 代表请求接口路径
]

6)主入口配置路由前缀

1.在QNtest下的urls.py文件中:

增加如下代码:

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include('user.urls', namespace='user')),
]

目的是将user app的路由注册到这里,并增加接口地址前缀user/

7)验证效果

启动项目后,通过postman或者jmeter携带接口参数(这里以jmeter举例)进行请求:

请求结果

至此我们已经完成了一个用户登录验证的接口了。

三、总结

在我们实际的应用场景中,用户登录成功后还需要去查询用户的一些信息(姓名、性别、邮箱、角色、用户名、地址等),这里的token验证和登录都是基于mysql数据库的,查询用户信息的话也是走mysql库中进行获取,每次涉及权限校验和验证的接口就都需要查一次库。这里我们可以通过redis来做登录的信息验证并将用户信息存入到redis中,来提高性能。

关于如何进行redis认证可以参考教程《【DRF】django restframework如何使用redis来做token认证》 进行学习。

相关文章