当前位置: 首页 > news >正文

12 django管理系统 - 注册与登录 - 登录

为了演示方便,我就直接使用models里的Admin来演示,不再创建用户模型了。

ok,先做基础配置

首先是在base.html中,新增登录和注册的入口

<ul class="nav navbar-nav navbar-right"><li><a href="/account/login/">登录</a></li><li><a href="/account/register/">注册</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li>
</ul>

接着去配置URL路径

urlpatterns = [# 部门管理path("dept/list/", dept.dept_list),path("dept/add/", dept.dept_add),path("dept/<int:nid>/edit_detail/", dept.dept_editdetail),path("dept/<int:nid>/delete/", dept.dept_delete),path("dept/search/", dept.dept_search),# 管理员管理path("admin/list/", admin.admin_list),path("admin/add/", admin.admin_add),# 登录path("account/login/", account.account_login),path("account/register/", account.account_register),]

去my_views文件夹下创建account视图,接着定义account_login方法和account_register方法

# 登录
def account_login(request):pass# 注册
def account_register(request):pass

现在开始进入登录模块的编写

我们让account_login去渲染account_login.html

# 登录
from django.shortcuts import renderdef account_login(request):return render(request, "account_login.html")

然后在templates文件下下新建account_login.html,在bootstrap官网随便扒拉一个表单改改。

{% load static %}<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录界面</title><!--引入css样式--><link rel="stylesheet" href="{% static '/plugin/bootstrap-3.4.1-dist/css/bootstrap.min.css' %}"></link><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;}.login-container {background-color: white;padding: 20px;border-radius: 5px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}.login-container h2 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input {width: 100%;padding: 10px;border: 1px solid #ddd;border-radius: 4px;}.form-group input[type="submit"] {background-color: #5cb85c;color: white;border: none;cursor: pointer;}.form-group input[type="submit"]:hover {background-color: #4cae4c;}</style>
</head>
<body>
<div class="account"><h2>用户登录</h2><form><div class="form-group"><label for="exampleInputText">用户名:</label><input type="email" id="exampleInputText" class="from-control" placeholder="用户名"></div><div class="form-group"><label for="exampleInputPassword">密码:</label><input type="password" id="exampleInputPassword" class="from-control" placeholder="密码"></div><div class="form-group"><input type="submit" value="登  录" class="btn btn-primary"></div></form>
</div>
</body>
</html>

界面如下:

页面显示出来之后,那么就可以进行表单内容验证部分的。

我们使用ModelForm来实现

首先,我们创建一个AccountModelForm,继承BootStrapModelForm。

因为我们只要Admin里的name和password,不需要sex,所以设置一下字段。

class AccountModelForm(BootStrapModelForm):class Meta:model = models.Adminfields = ["name", "password"]

接着就去取定义业务逻辑:

GET 请求: 创建一个空的 AccountModelForm实例。 将表单实例传递给 account_login.html 模板进行渲染,以便用户输入信息。

POST 请求: 使用 POST 数据创建 LoginForm 实例并验证数据。 验证通过后: 获取用户名和密码。 查询数据库,验证用户名和密码是否匹配。 匹配成功,则设置 session 并返回登录成功提示。 验证不通过: 返回带有错误信息的登录页面。

def account_login(request):if request.method == 'GET':form = AccountModelForm()context = {"form": form}return render(request, "account_login.html", context)form = AccountModelForm(data=request.POST)if form.is_valid():name = form.cleaned_data.get("name")password = form.cleaned_data.get("password")print(name, password)return HttpResponse("登录成功")else:return HttpResponse("登录失败")

因为表单数据没有进行数据库查询,我随便输入一下用户和密码看看能不能显示登录成功

可以看到能够进入表单验证阶段。

接下来是要编写account_login的表单验证业务逻辑。然后就去是数据库里找数据,判断是否在数据库中存在。

def account_login(request):"""处理用户登录请求。参数:- request: HttpRequest对象,包含登录请求的数据。返回:- HttpResponse对象,表示登录结果或渲染的登录表单。"""# 判断请求方法,GET请求表示用户希望看到登录页面if request.method == 'GET':# 初始化登录表单对象form = AccountModelForm()# 构建上下文,将表单传递给模板以渲染登录页面context = {"form": form}# 返回渲染后的登录页面return render(request, "account_login.html", context)# 非GET请求视为登录尝试,使用POST数据初始化表单对象form = AccountModelForm(data=request.POST)# print(".........", form) 用于调试的打印语句,输出表单数据# 验证表单数据有效性if form.is_valid():# 获取验证后的用户名和密码name = form.cleaned_data.get("name")password = form.cleaned_data.get("password")# 打印用户名和密码,用于调试print(name, password)# 在数据库中查询匹配的用户对象obj = models.Admin.objects.using("default").filter(name=name, password=password).first()# 如果查询结果为空,返回错误信息if not obj:return HttpResponse("用户名或密码错误")# 登录成功,返回成功信息return HttpResponse("登录成功")# 表单数据无效,重新渲染登录页面并显示错误信息return render(request, "account_login.html", {"form": form})

如果我随便输入数据,那么会提示用户名或者密码错误

我们去数据库中找一个存在的进行表单验证看看

可以看到,明显是可以登录成功。

接下来,我们还要保存session,为用户下次登录做准备。

我们先进navicat看一下session表,是空的。

然后修改account_logind的业务逻辑,保存session

def account_login(request):if request.method == 'GET':form = AccountModelForm()context = {"form": form}return render(request, "account_login.html", context)form = AccountModelForm(data=request.POST)# print(".........", form)if form.is_valid():name = form.cleaned_data.get("name")password = form.cleaned_data.get("password")print(name, password)obj = models.Admin.objects.using("default").filter(name=name, password=password).first()if not obj:return HttpResponse("用户名或密码错误")# 保存sessionrequest.session["user_info"] = {"id": obj.id, "name": obj.name}  # 设置sessionprint('request.session["user_info"]...is', request.session["user_info"])# return HttpResponse("登录成功")# 返回管理员列表return redirect('/admin/list')return render(request, "account_login.html", {"form": form})

我们尝试登录一下,看看登录后是否跳转到管理员列表,并且看看session是否保存。

用户名:Kong Sze Yu,密码:Nd2ZeMwBhx

我们去navicat看看session

相关文章:

12 django管理系统 - 注册与登录 - 登录

为了演示方便&#xff0c;我就直接使用models里的Admin来演示&#xff0c;不再创建用户模型了。 ok&#xff0c;先做基础配置 首先是在base.html中&#xff0c;新增登录和注册的入口 <ul class"nav navbar-nav navbar-right"><li><a href"/ac…...

2020年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;OSI参考模型网络协议的三要素 网络协议的三要素&#xff1a;语法 &#xff0c;语义&#xff0c;同步&#xff08;时序&#xff09; 语法&#xff1a;定义收发双方所交换信息的格式 语法&#xff1a;定义收发双方所要完成的操作 网页的加载 …...

速盾:cdn高防服务器防火墙的特性是什么?

CDN高防服务器防火墙是一种专门为互联网应用提供安全防护的网络安全设备。它采用先进的技术和算法&#xff0c;通过对网络流量进行过滤和检测&#xff0c;以防止恶意攻击和非法访问&#xff0c;保障网络服务的可用性和安全性。CDN高防服务器防火墙的特性主要包括以下几个方面&a…...

小程序分包和预加载

一、目的 分包的目的&#xff1a; 提升小程序的首屏加载速度&#xff0c;其原理和PC端网页的路由懒加载非常类似。即当我们第一个打开一个小程序的时候&#xff0c;只加载主包以及一些公共的资源&#xff0c;当调到某个页面的时候&#xff0c;在加载该页面所在的分包&#xf…...

【MATLAB 串口调试+虚拟串口测试】

文章目录 前言一、matlab 串口二、测试串口1.从系统中获取串口号2.避免串口打开被占用3. 安装虚拟串口4. 打开串口助手和MATALB 进行测试 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本篇文章正文…...

mac 安装最新版nginx

1. clone最新版本源代码&#xff1a; git clone https://github.com/nginx/nginx.git 2. 下载PCRE 没有PCRE那我们就下&#xff0c;下载地址&#xff1a;https://sourceforge.net/projects/pcre/files/pcre/&#xff0c;笔者下载的pcre-8.45.zip&#xff0c;下载之后解压到ngi…...

极氪汽车困局:营销频繁车、产品力不足

“ 极氪汽车的“车上吃火锅”营销活动虽登上热搜&#xff0c;但因频繁忽视老用户和产品力不足的争议&#xff0c;并未赢得消费者好感&#xff0c;反而加剧负面印象。 ” 科技新知 原创 作者丨颜瞾 编辑丨蕨影 近日&#xff0c;背靠吉利集团的极氪…...

Icecream 与 Python 日志库及性能分析整合指南

简介 Icecream 是一个用于简化 Python 调试过程的库&#xff0c;它允许开发者轻松打印变量名和它们的值。Python 的 logging 库则提供了一个强大的日志记录系统&#xff0c;用于跟踪应用程序的运行情况。而性能分析则是评估代码执行效率的重要手段。本指南将介绍如何将 Icecre…...

请解读下面的程序:pat =re.compile(r‘\d+‘)res = pat.search(‘www.ddd996.com‘)res.group()

请解读下面的程序&#xff1a; pat re.compile(r\d) res pat.search(www.ddd996.com) res.group() 这段程序使用了正则表达式模块re来搜索字符串中的数字。首先&#xff0c;通过re.compile函数创建了一个正则表达式对象pat&#xff0c;该正则表达式是r\d&#xff0c;意味着匹…...

Fibonacci任意一位的值得算法

csDP写法 using System; class Program {static void Main(string[] args){Console.WriteLine("请输入一个非负整数&#xff1a;");// 读取用户输入while(true){string input Console.ReadLine();int n Convert.ToInt32(input);if (n < 0){Console.WriteLine(&…...

gbn,sr和tcp的区别

这是关于三种不同协议&#xff08;GBN、SR、TCP&#xff09;处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制&#xff1a; GBN&#xff08;Go-Back-N&#xff09;协议&#xff1a; 类型发送方的计时器保存的是啥接收方收到失序的分组怎么办超时的时候发…...

FastGPT本地开发 之 通过Navicat管理MongoDB、PostgreSQL数据库

1. 背景 前期已经完成FastGPT的本地化部署工作&#xff0c;通过Docker启动FastGPT的相关容器即可运行。&#xff08;共6个容器&#xff09; 2.本地化开发 2.1 前置依赖 2.2 源码拉取 git clone gitgithub.com:labring/FastGPT.git2.3 数据库管理 本地化运行的FastGPT使用…...

hardhat部署智能合约

Hardhat安装 安装node 可以使用 nvm 安装node GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 安装Hardhat 打开命令行工具&#xff0c;输入&#xff1a; mkdir hardhat-demo cd hardhat-demo npm i…...

界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…...

【ERROR】ubuntu source: not found

Ubuntu 24.04.1 LTS系统设置环境变量&#xff0c;执行 source ~/.bashrc出现错误&#xff1a; source command not found 解决方案&#xff1a;不需要处理( echo 以下你的环境变量&#xff0c;发现是生效的)&#xff0c;ubantu系统 中 /bin/sh 通常链接到 dash&#xff0c;这…...

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 &#xff08;一&#xff09;模版方法postProcessBeanFactory &#xff08;二&#xff09;AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …...

配置nginx服务通过ip访问多网站

过程概要 1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 3.查看nginx是否开启 4.为当前主机添加多地址&#xff08;ip a&#xff09; 5.自定义nginx配置文件通过多地址区分多网站 /etc/nginx/conf.d/test_ip.conf server { #标记为一个虚拟主机 } 6.根据配置…...

银河麒麟V10设置QT开发程序开机自启动

1、切换root用户: su root 2、进入/etc/xdg/autostart目录&#xff1a; cd /etc/xdg/autostart 3、创建一个test.desktop文件&#xff0c;文件名不一定命名为test&#xff0c;可以自己随意命名&#xff1a; touch test.desktop 4、完善test.desktop文件内容&#xff1a; …...

RabbitMQ高级特性详解

前言 RabbitMQ是一款广泛使用的开源消息队列软件&#xff0c;它基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;标准实现。本文将带你深入了解RabbitMQ的一些高级特性&#xff0c;包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等&#xff…...

提升泛化能力的前沿方法:多任务学习在机器学习中的应用与实践

提升泛化能力的前沿方法&#xff1a;多任务学习在机器学习中的应用与实践 &#x1f4cb; 目录 &#x1f9e9; 多任务学习的概念与动机&#x1f310; 多任务学习在自然语言处理中的应用案例&#x1f5bc;️ 多任务学习在计算机视觉中的应用案例⚙️ 项目实践&#xff1a;实现多…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...