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

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

一、前言

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

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

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

二、验证登录讲解

1)创建用户

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

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

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

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

2)开发登录接口

1)django项目目录结构创建

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

  1. django-admin startapp user

2)注册app到配置项中

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

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'user',
  9. 'rest_framework',
  10. 'rest_framework.authtoken'
  11. ]

3)定义接口说明

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

接口地址:/user/login

请求方法: POST

传参要求:

  1. {
  2. "user_name":"admin",
  3. "password":"123456"
  4. }

4)开发接口

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

  1. from django.contrib.auth import authenticate
  2. from rest_framework import status
  3. from rest_framework.decorators import api_view
  4. from rest_framework.response import Response
  5. from rest_framework.authtoken.models import Token
  6. @api_view(['POST']) # 列表中的元素代表支持哪些请求方法
  7. def login(request):
  8. """ 登录接口 """
  9. # 验证用户帐号密码的内置方法
  10. user = authenticate(username=request.data['username'], password=request.data['password'])
  11. if user:
  12. Token.objects.filter(user_id=user.id).delete() # 删除原来的token
  13. token = Token.objects.create(user=user) # 创建新的token
  14. return Response(data={'msg': '登录成功!', 'token': token.key}) # 返回登录信息及token
  15. return Response(data={'msg': '用户名或错误!'}, status=status.HTTP_401_UNAUTHORIZED)

5)指定路由url

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

  1. from django.urls import path
  2. from user.views import login
  3. app_name = "accounts"
  4. urlpatterns = [
  5. path('login', login), # 代表请求接口路径
  6. ]

6)主入口配置路由前缀

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

增加如下代码:

  1. from django.contrib import admin
  2. from django.urls import path
  3. from django.urls import include
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. path('user/', include('user.urls', namespace='user')),
  7. ]

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

7)验证效果

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

请求结果

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

三、总结

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

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

相关文章