一、前言
对于一个系统来讲,用户模块是非常基本且重要的。搭建的测试平台也需要对用户、用户权限等进行管理。下面为你讲解如何通过DRF来快速的做一个用户登录的验证接口。
二、验证登录讲解
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 (postman传参格式记得选json) 或者jmeter携带接口参数(这里以jmeter举例)进行请求 (帐号密码用你创建时输入的):
请求结果
至此我们已经完成了一个用户登录验证的接口了。
三、总结
在我们实际的应用场景中,用户登录成功后还需要去查询用户的一些信息(姓名、性别、邮箱、角色、用户名、地址等),上面代码实现的token验证和登录都是基于mysql数据库的,查询用户信息的话也是走mysql库中进行获取,每次涉及权限校验和验证的接口就都需要查一次库,这样请求量大了后会对数据库增加不少的压力,我们可以通过redis来做登录的信息验证并将用户信息存入到redis中,来提高性能。
资源分享
下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】
面试资料
我们学习软件测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作
这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源在下方