写点什么

开源一夏 | Web 开发(七):登录实现及功能测试

作者:是Dream呀
  • 2022 年 8 月 02 日
  • 本文字数:1801 字

    阅读完需:约 6 分钟


前面我们 实现了 服务端 管理员 的一些增删改查操作,但是,我们还没有实现管理员 登录的功能呢。现在我们来根据,API 接口文档,实现 管理员登录 功能。

一、处理登录、登出请求

我们可以在mgr目录里面创建一个代码文件 sign_in_out.py这个代码文件就是用来处理 管理员登录和登出 的 API 请求的。大家可以思考一下, 我们的代码 该如何处理登录请求呢?无非就把请求参数里面的用户名、密码取出来, 和数据库中记录的用户名密码进行比对。如果和数据库中 记录的一致就认为是认证通过,否则就是不通过。Django 中有个内置 app 名为 django.contrib.auth ,缺省包含在项目 Installed App 设置中。这个 app 的 models 定义中包含了一张 用户表,名为 auth_user 。当我们执行 migrate 创建数据库表时,根据,就会为我们创建 用户表 auth_user,如下所示:



django.contrib.auth 这个 app 已经 为我们做好了登录验证功能。我们只需要使用这个 app 库里面的方法就可以了。Django 的文档就给出了登录和登出代码范例,我们稍微修改一下。我们在 mgr 目录下面, 创建一个 sign_in_out.py 文件。在该文件中,输入如下内容:


from django.http import JsonResponse
from django.contrib.auth import authenticate, login, logout
# 登录处理def signin( request): # 从 HTTP POST 请求中获取用户名、密码参数 userName = request.POST.get('username') passWord = request.POST.get('password')
# 使用 Django auth 库里面的 方法校验用户名、密码 user = authenticate(username=userName, password=passWord) # 如果能找到用户,并且密码正确 if user is not None: if user.is_active: if user.is_superuser: login(request, user) # 在session中存入用户类型 request.session['usertype'] = 'mgr'
return JsonResponse({'ret': 0}) else: return JsonResponse({'ret': 1, 'msg': '请使用管理员账户登录'}) else: return JsonResponse({'ret': 0, 'msg': '用户已经被禁用'}) # 否则就是用户名、密码有误 else: return JsonResponse({'ret': 1, 'msg': '用户名或者密码错误'})

# 登出处理def signout( request): # 使用登出方法 logout(request) return JsonResponse({'ret': 0})
复制代码

二、创建 url 路由

Bysms 系统,浏览器登陆登录页面的 url 是http://127.0.0.1:8080/mgr/sign.html



但是这不是 登录 API 接口的 url 路径。根据接口,管理员登录的 API 路径是 /api/mgr/signin前面的课程, 我们已经在总路由文件 bysms/urls.py 中 添加了如下路由记录:


    # 凡是 url 以 api/mgr  开头的,    # 都根据 mgr.urls 里面的 子路由表进行路由    path('api/mgr/', include('mgr.urls')),
复制代码


现在,我们只需要 在 mgr 目录下面 的子路由文件 urls.py 里添加如下内容:


from django.urls import pathfrom mgr import sign_in_out
urlpatterns = [
path('signin', sign_in_out.signin), path('signout', sign_in_out.signout),
]
复制代码


这样就表示:如果有 HTTP 请求 url 是 /api/mgr/signin 就由 sign_in_out.py 里面的 signin 函数处理,如果有 HTTP 请求 url 是 /api/mgr/signout 就由 sign_in_out.py 里面的 signout 函数处理。

三、测试我们的代码

这样我们后端的登录请求处理的代码已经完成了。那么,怎么测试是否正确呢?

3.1 测试登录信息

还是可以 使用 requests 库构建 登录请求http消息, 并且检查响应,看看是否能登录成功。非常简单,如下代码即可:


import  requests,pprint
payload = { 'username': 'byhy', 'aabbcc': '88888888'}
response = requests.post('http://localhost/api/mgr/signin', data=payload)
pprint.pprint(response.json())
复制代码



运行一下,大家看看,是不是可以返回这样的结果呢?



根据接口文档,ret 值为 0,表示登录接口调用成功。

3.2 测试用户信息


测试代码:


# @Time : 2022/7/11 20:31# @Author : 是Dream呀# @File : test.pyimport  requests,pprint
payload = { 'action':'list_customer'}
response = requests.get('http://127.0.0.1:8080/api/mgr/customers', params=payload)
pprint.pprint(response.json())
复制代码


运行结果:



用户头像

是Dream呀

关注

Python领域优质创作者 2021.03.30 加入

2021年度博客之星TOP100,2021年度领域TOP5 Python领域优质创作者,交流、合作、学习,欢迎私信我VX+++ 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!

评论

发布
暂无评论
开源一夏 |  Web开发(七):登录实现及功能测试_是Dream呀_InfoQ写作社区