• Python Web开发(七):登录实现及功能测试


    在这里插入图片描述

    前言: 📢📢📢
    🏅🏅🏅作者简介:是Dream呀,华为云享专家、CSDN原力计划作者、Python领域优质创作者,专注分享Python领域原创系列文章。
    🌻🌻🌻热门专栏:【零基础学Python
    本课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘
    🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信我或者文末添加vx,拉你进群,群内有行业大佬帮大家解答疑问,我们一起学习,群内定期还会有抽奖活动和红包相送嗷,快来进入我们吧~
    💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
    💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺

    前面我们 实现了 服务端 管理员 的一些增删改查操作,但是,我们还没有实现管理员 登录的功能呢。
    现在我们来根据,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})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    二、创建 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')),
    
    • 1
    • 2
    • 3

    现在,我们只需要 在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),
    
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这样就表示:
    如果有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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    运行一下,大家看看,是不是可以返回这样的结果呢?
    在这里插入图片描述
    根据接口文档,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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果:
    在这里插入图片描述

    【系列好文推荐】

    🎯🎯🎯
    Python Web开发一:Web开发简介
    Python Web开发二:Django的安装和运行
    Python Web开发(三):HTTP请求的url路由

    欢迎订阅本专栏:零基础学Python 系列课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘
    💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
    🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
    在这里插入图片描述
    在这里插入图片描述
    ⬇️⬇️ ⬇️ 商务合作|交流学习|粉丝福利|Python全套资料⬇️ ⬇️ ⬇️ 欢迎联系~

  • 相关阅读:
    Hadoop2.0探讨
    设计模式学习(十五):策略模式
    Kubernetes 上运行有状态应用的最佳实践 k8s
    抖音矩阵系统,抖音矩阵系统,抖音矩阵系统,抖音矩阵系统,抖音矩阵系统,抖音矩阵系统,抖音矩阵系统,抖音矩阵系统。
    训练第一个MMClassification模型
    java 高级面试题分布式与微服务(借鉴)
    C语言将“数字转换成字符串”
    QT修改windowTitle的名字以及图片
    【C++基础】类与对象(上):访问限定符、类作用域、类实例化、类对象模型、this指针
    C#使用Zxing.dll组件解析二维码
  • 原文地址:https://blog.csdn.net/weixin_51390582/article/details/125728793