对于一个系统来讲,用户模块是非常基本且重要的。搭建的测试平台也需要对用户、用户权限等进行管理。下面为你讲解如何通过DRF来快速的做一个用户登录的验证接口。
完整教程地址:《从0搭建自动化测试平台》
项目在线演示地址:http://121.43.43.59/ (帐号:admin 密码:123456)
进入django的项目目录,执行下面的命令进行用户的创建:
python manage.py createsuperuser --email admin@example.com --username admin
按照提示一步一步设置用户的密码和其他信息即可:
用户创建成功后,会在数据库的auth_user
表中看到该用户的记录:
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认证》 进行学习。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://quniao.blog.csdn.net/article/details/121554892
内容来源于网络,如有侵权,请联系作者删除!