Python Web开发:登录实现及功能测试

Posted 是Dream呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Web开发:登录实现及功能测试相关的知识,希望对你有一定的参考价值。

前面我们 实现了 服务端 管理员 的一些增删改查操作,但是,我们还没有实现管理员 登录的功能呢。
现在我们来根据,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 path
from 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.py
import  requests,pprint

payload = 
    action:list_customer


response = requests.get(http://127.0.0.1:8080/api/mgr/customers,
              params=payload)

pprint.pprint(response.json())

运行结果:

以上是关于Python Web开发:登录实现及功能测试的主要内容,如果未能解决你的问题,请参考以下文章

Selenium基于Python web自动化基础二 -- 免登录等待及unittest单元测试框架

python Web开发 flask轻量级Web框架实战项目--实现功能--账号密码登录界面(连接数据库Mysql)

Python 基于Flask的Web开发用户登录 注册

python+selenium实现登录账户

python+selenium实现登录账户

Web应用多账号系统设计及微信扫码登录实现