Python从0到100(四十六):实现管理员登录及测试功能

在这里插入图片描述

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!

Python Web开发:实现管理员登录功能

在之前的开发过程中,我们已经实现了服务端管理员的一些基本操作,如增删改查。然而,管理员登录功能尚未实现。本文将详细介绍如何在Python Web应用中实现管理员登录功能。

一、处理登录、登出请求

为了处理管理员的登录和登出请求,我们可以在mgr目录中创建一个名为sign_in_out.py的文件。这个文件将负责处理相关的API请求。

登录请求处理

管理员登录的核心在于验证用户名和密码。我们可以通过以下步骤实现:

  1. 获取请求参数:从HTTP POST请求中提取用户名和密码。
  2. 验证用户名和密码:使用Django内置的django.contrib.auth应用进行验证。
  3. 登录用户:如果验证通过,使用login方法登录用户。
  4. 返回响应:根据验证结果返回相应的JSON响应。

Django中有个内置app 名为 django.contrib.auth ,缺省包含在项目Installed App设置中。
这个app 的 models 定义中包含了一张 用户表,名为 auth_user 。
当我们执行 migrate 创建数据库表时,根据,就会为我们创建 用户表 auth_user,如下所示:
在这里插入图片描述
Django的django.contrib.auth应用为我们提供了丰富的用户认证功能,包括用户登录、登出、密码重置等。以下是具体的实现代码:

from django.http import JsonResponsefrom 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
在这里插入图片描述
为了使登录和登出功能能够通过HTTP请求触发,我们需要在Django的URL路由系统中注册相应的路径。以下是如何在mgr目录下的urls.py文件中添加路由:

from django.urls import path
from mgr import sign_in_outurlpatterns = [path('signin', sign_in_out.signin),path('signout', sign_in_out.signout),
]

这样,当有HTTP请求到达/api/mgr/signin时,将由signin函数处理;当请求到达/api/mgr/signout时,将由signout函数处理。

三、测试我们的代码

开发完成后,测试是必不可少的一步。以下是如何测试管理员登录功能:

3.1 测试登录信息

我们可以使用requests库构建登录请求,并检查响应,以验证登录是否成功。以下是一个简单的测试脚本:

import requests, pprintpayload = {'username': 'byhy','password': '88888888'
}response = requests.post('http://localhost/api/mgr/signin',data=payload)pprint.pprint(response.json())

在这里插入图片描述

运行一下,大家看看,是不是可以返回这样的结果呢?
在这里插入图片描述
根据接口文档,如果ret值为0,则表示登录接口调用成功。

3.2 测试用户信息

在这里插入图片描述

在用户登录成功后,我们还可以测试获取用户信息的功能。以下是一个测试脚本:

import requests, pprintpayload = {'action': 'list_customer'
}response = requests.get('http://127.0.0.1:8080/api/mgr/customers', params=payload)pprint.pprint(response.json())

运行这个脚本,我们可以看到用户信息是否正确返回。

通过以上步骤,我们不仅实现了管理员的登录和登出功能,还通过测试验证了其正确性。这为后续的权限管理和用户操作提供了基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382978.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

QT--线程

一、线程QThread QThread 类提供不依赖平台的管理线程的方法,如果要设计多线程程序,一般是从 QThread继承定义一个线程类,在自定义线程类里进行任务处理。qt拥有一个GUI线程,该线程阻塞式监控窗体,来自任何用户的操作都会被gui捕获到,并处理…

BGP选路之AS-PATH

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value,然后是Local Preference,再次是路由生成方式&a…

BGP选路之Next Hop

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定出去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较,从而决定是否将该最优BGP路由放进P路由表中…

【在Linux世界中追寻伟大的One Piece】Linux进程概念

目录 1 -> 冯诺依曼体系结构 2 -> 操作系统(operator System) 2.1 -> 概念 2.2 -> 系统调用和库函数 3 -> 进程 3.1 -> 概念 3.2 -> 进程-PCB 3.3 -> 进程状态 3.3.1 -> Z(Zombie)-僵尸进程 3.3.2 -> 孤儿进程 3.4 -> 进程优先级 …

2024-07-24 buildroot c语言应用获取 kernel kobject_uevent_env 发送的消息,侦测USB口变化。

一、kobject_uevent_env 是 Linux 内核中的一个函数,用于发送内核事件到用户空间。它主要用于生成和发送与内核对象(kobject)相关的事件通知,这些事件通常用于通知用户空间程序(如 udev)有关硬件的变化或其…

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)

最近闲来无聊,虽然会使用git操作,但是 git fetch 和 git pull 的区别,git merge 和 git rebase的区别只是一知半解,稍微研究一下; git fetch 和 git pull 的区别 git fetch git fetch 是将远程仓库中的改动拉到本地…

解决vscode+UE5中vscode无法识别头文件,无法函数无法跳转,也无法自动补全的问题。

一、概述 接上一条博客,虽然解决了报错的问题,但是实际上的问题却没有解决,无论我怎么点击,其都无法完成跳转,也无法完成自动补全的问题。 在网络上搜索了很多资料后,发现是在使用vscode时候UE5在vscode中的…

百度秋招提前批C++

1.C++内存模型 堆栈全常代 (1)堆 heap : 由malloc分配的内存块,其释放编译器不去管,由我们程序自己控制(一个malloc对应一个free)。涉及的问题:“缓冲区溢出”、“内存泄露”(new分配的在自由存储区 经常由堆实现) (2)栈 stack : 是那些编译器在需要时分配,在…

手动搭建微型计算机(涉及:CPU、内存、寄存器等)

目录 微型计算机基础元件及作用CPU地址总线数据总线 内存地址总线数据总线内存大小的计算 寄存器先将Z80CPU与TC5517内存相连参考文章 微型计算机基础元件及作用 CPU、内存、I/O CPU 包含地址总线引脚和数据总线引脚。 以Z80CPU为例: 地址总线 地址总线引脚…

【React】条件渲染:深入探讨高效开发技巧与最佳实践

文章目录 一、什么是条件渲染?二、条件渲染的实现方式三、条件渲染的最佳实践四、复杂条件渲染的实现 在现代前端开发中,React 已成为开发者构建用户界面的首选框架之一。React 的强大之处在于其组件化和状态管理能力,而条件渲染则是 React 开…

IGV.js | 载入自己下载的gtf文件

1.安装 htslib-1.20 https://www.htslib.org/doc/tabix.html J3$ cd ~/Downloads/ $ wget https://github.com/samtools/htslib/releases/download/1.20/htslib-1.20.tar.bz2 $ tar jxvf htslib-1.20.tar.bz2编译安装: $ cd htslib-1.20/ $ ./configure --prefix/…

java面向对象进阶进阶篇--《抽象类和抽象方法》

个人主页VON 所属专栏java从入门到起飞 目录 个人主页​编辑我的主页​编辑 一、简介 抽象方法: 抽象类: 概述: 二、抽象类 特点和用途 示例: Animal类 Dog类 Flog类 Sheep类 Text类 结果展示: 三、抽象方…

SQL

SQL全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。 SQL通用语法 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的…

Linux环境下安装配置jdk和maven

一、jdk下载 Oracle的JDK开始收费了,如非必要,请勿使用!!! jdk下载地址1(推荐)https://github.com/graalvm/graalvm-ce-builds/releases jdk下载地址2(可选):…

Mac安装Hoomebrew与升级Python版本

参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本,你可以使用以下命令来设置默认的Python版本: # 首先找到新安…

防火墙——网络环境支持

目录 网络环境支持 防火墙的组网 web连接上防火墙 web管理口 让防火墙接到网络环境中 ​编辑 管理员用户管理 缺省管理员 接口 配置一个普通接口 创建安全区域 路由模式 透明模式 混合模式 防火墙的安全策略 防火墙转发流程 与传统包过滤的区别 创建安全策略 …

神经网络新范式——LNDP:可终身学习的自主发育程序

近年来人工智能的高速发展离不开深度神经网络的应用,深度神经网络的发展是从大数据和硬件算力设备大规模发展之后才逐渐占据了人工智能的核心研究地位的,在此之前人工智能的研究都是以可解释性强、计算力小的统计学模型为主,但是以统计学为主…

c生万物系列(封装)

为了对c语言进行封装,笔者参考了lw_oopc等开源库,决定使用宏对结构体进行封装。 先说一下大致思想:通过宏,结构体和文件来实现封装。 大概步骤:抽象出类-> 使用lw_oopc库进行封装->定义接口封装底层实现 ->…

【概率论】-2-概率论公理(Axioms of Probability)

上一篇文章我们学习了基本的概率论内容-排列组合,本次我们学习概率论公理的内容,正式开始计算概率,在开始前我们需要学习一些基本概念。 目录 一.样本空间和事件 1.样本空间 2.事件 3.交并补 二、概率公理 1.基本公理 2.对称差 2.布尔…