【Django】网上蛋糕项目商城-注册,登录,修改用户信息,退出功能

概念

通过以上多篇文章的讲解,对该项目的功能已经实现了很多,本文将对该项目的用户注册,登录,修改用户信息,以及退出等功能的实现。

注册功能实现

点击head.html头部页面的注册按钮,触发超链接跳转至user_register.html页面,其页面代码如下

在urls.py文件中定义该请求地址

path('register/',views.register),

在views.py文件中创建处理该请求的函数

# 跳转至注册页面
def register(request):return render(request,"user_register.html",{"typeList": types})

其注册页面代码如下

<!DOCTYPE html>
<html>
<head><title>用户注册</title>{% load static %}<meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}"><link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}"><script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script><script type="text/javascript" src="{%  static 'js/bootstrap.min.js' %}"></script><script type="text/javascript" src="{% static 'js/simpleCart.min.js' %}"></script>
</head>
<body>{% include "header.html" with flag=10 typeList=typeList %}<div class="account"><div class="container"><div class="register">{% if msg %}<div class="alert alert-danger">{{ msg }}</div>{% endif %}<form action="/user_rigister/" method="post">{% csrf_token %}<div class="register-top-grid"><h3>注册新用户</h3><div class="input"><span>用户名 <label style="color:red;">*</label></span><input type="text" name="username" placeholder="请输入用户名" required="required"></div><div class="input"><span>邮箱 <label style="color:red;">*</label></span><input type="text" name="email" placeholder="请输入邮箱" required="required"></div><div class="input"><span>密码 <label style="color:red;">*</label></span><input type="password" name="password" placeholder="请输入密码" required="required"></div><div class="input"><span>收货人<label></label></span><input type="text" name="name" placeholder="请输入收货人姓名"></div><div class="input"><span>收货电话<label></label></span><input type="text" name="phone" placeholder="请输入收货电话"></div><div class="input"><span>收货地址<label></label></span><input type="text" name="address" placeholder="请输入收货地址"></div><div class="clearfix"> </div></div><div class="register-but text-center"><input type="submit" value="提交"><div class="clearfix"> </div></div></form><div class="clearfix"> </div></div></div></div>{% include "footer.html" %}
</body>
</html>

用户填写注册信息后,点击提交按钮,将信息发送给后台服务器,在urls.py文件中定义请求地址

path('user_rigister/',views.user_rigister),

在views.py文件中创建处理该函数

# 处理注册请求
def user_rigister(request):# 用户名username=request.POST["username"]# 邮箱email=request.POST["email"]# 密码password=request.POST["password"]# 收货人name=request.POST["name"]# 收货电话phone=request.POST["phone"]# 收货地址address=request.POST["address"]# 判断用户名是否存在users=User.objects.filter(username=username)# 判断邮箱是否存在emails=User.objects.filter(email=email)if users or emails:msg="用户名或邮箱重复,请重新填写!"path="user_register.html"else:User.objects.create(username=username,email=email,password=password,name=name,phone=phone,address=address,isadmin=False,isvalidate=False)msg = "注册成功,请登录!"path = "user_login.html"return render(request,path,{"msg":msg,"typeList": types})

当注册成功,跳转至登录页面,页面代码如下,如果注册失败,则会重新刷新注册页面

<!DOCTYPE html>
<html>
<head><title>用户登录</title>{% load static %}<meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}"><link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}"><script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script><script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script><script type="text/javascript" src="{% static 'js/simpleCart.min.js' %}"></script>
</head>
<body>{% include "header.html" with flag=9 typeList=typeList %}<div class="account"><div class="container"><div class="register">{% if msg %}<div class="alert alert-success">{{ msg }}</div>{% endif %}{% if failMsg %}<div class="alert alert-danger">{{ failMsg }}</div>{% endif %}<form action="/user_login" method="post">{% csrf_token %}<div class="register-top-grid"><h3>用户登录</h3><div class="input"><span>用户名/邮箱 <label style="color:red;">*</label></span><input type="text" name="ue" placeholder="请输入用户名" required="required"></div><div class="input"><span>密码 <label style="color:red;">*</label></span><input type="password" name="password" placeholder="请输入密码" required="required"></div><div class="clearfix"> </div></div><div class="register-but text-center"><input type="submit" value="提交"><div class="clearfix"> </div></div></form><div class="clearfix"> </div></div></div></div>{% include "footer.html" %}
</body>
</html>

登录功能实现

当注册成功后,进入登录页面,界面如上图所示,也可以点击登录选项进入登录页面

在urls.py文件中定义该请求地址

path('login/',views.login),

在views文件中创建该函数

# 处理跳转登录页面的请求
def login(request):return render(request, "user_login.html", {"typeList": types})

当用户输入用户名和密码后,点击提交,将用户登录信息发送给后台服务器

在urls文件中定义请求地址

path('user_login/',views.user_login),

 在setting.py文件中,添加以下代码,使session在固定时间内失效

# 设置session过期时间为1小时(3600秒)
SESSION_COOKIE_AGE = 60

在views文件中创建函数处理该请求

# 处理登录的请求
def user_login(request):# 用户名/邮箱ue=request.POST["ue"]# 密码password=request.POST["password"]# 使用用户名和密码查询该用户信息users=User.objects.filter(username=ue,password=password)if not users:users=User.objects.filter(email=ue,password=password)# global userif users:request.session["isLogin"]=Trueu=users.values()[0]print(u)request.session["user"]=ufailMsg = ""path="user_center.html"else:user=Nonerequest.session["user"] = userfailMsg="用户名、邮箱或者密码错误,请重新登录!"path="user_login.html"print(users.values_list())return render(request,path,{"typeList": types,"failMsg":failMsg})

当登录成功后,跳转至个人中心页面,页面代码如下

<!DOCTYPE html>
<html>
<head><title>个人中心</title>{% load static %}<meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}"><link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}"><script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script><script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script><script type="text/javascript" src="{% static 'js/simpleCart.min.js' %}"></script>
</head>
<body>
{% include "header.html" with flag=4 typeList=typeList user=user  %}{% if not user %}<script>//当用户没有登录,直接进入个人中心时,强制跳转至未登录的首页页面location.href="/"</script>{% endif %}<!--account--><div class="account"><div class="container"><div class="register">{% if msg %}<div class="alert alert-success">{{ msg }}</div>{% endif %}{% if failMsg %}<div class="alert alert-danger">{{ failMsg }}</div>{% endif %}<div class="register-top-grid"><h3>个人中心</h3><form action="/user_changeaddress/" method="post">{% csrf_token %}<!-- 收货信息 start --><h4>收货信息</h4><div class="input"><span>收货人<label></label></span><input type="text" name="name" value="{{ request.session.user.name }}" placeholder="请输入收货"></div><div class="input"><span>收货电话</span><input type="text" name="phone" value="{{ request.session.user.phone }}" placeholder="请输入收货电话"></div><div class="input"><span>收货地址</span><input type="text" name="address" value="{{ request.session.user.address }}" placeholder="请输入收货地址"></div><div class="register-but text-center"><input type="submit" value="提交"></div>	<!-- 收货信息 end --></form><hr><form action="/user_changepwd/" method="post">{% csrf_token %}<h4>安全信息</h4><div class="input"><span>原密码</span><input type="text" name="password" placeholder="请输入原密码"> </div><div class="input"><span>新密码</span><input type="text" name="newPassword" placeholder="请输入新密码"> </div><div class="clearfix"> </div><div class="register-but text-center"><input type="submit" value="提交"></div>	</form></div><div class="clearfix"> </div></div></div></div>{% include "footer.html" %}
</body>
</html>

修改用户信息功能

在header.html头部页面中,添加以下超链接

在urls.py文件中定义接收该请求的地址

path('user_center/',views.user_center),

在views.py文件中定义该函数处理请求

# 个人中心页面
def user_center(request):return render(request,"user_center.html",{"typeList": types})

1.修改个人收货地址 

该页面中,有两个表单,第一个表单用于修改用户个人信息,第二个表单用于修改密码。

在urls文件中添加接收请求地址

path('user_changeaddress/',views.user_changeaddress),

在views文件中定义函数处理该请求

# 修改个人收件信息
def user_changeaddress(request):name=request.POST["name"]phone=request.POST["phone"]address=request.POST["address"]user=request.session.get("user")print(user)u=User.objects.filter(id=user["id"])u.update(name=name,phone=phone,address=address)u = User.objects.filter(id=user["id"]).values()# 将更新后的数据同步session中request.session["user"]=u[0]msg="收件信息更新成功!"return render(request,"user_center.html",{"typeList": types,"msg":msg})

2.修改密码 

在urls文件中定义接收修改密码的请求  

path('user_changepwd/',views.user_changepwd),

在views文件中创建函数处理修改密码请求

# 修改密码
def user_changepwd(request):psd=request.POST["password"]newPsd=request.POST["newPassword"]user = request.session.get("user")print(user)key=""if psd == user["password"]:u = User.objects.filter(id=user["id"])u.update(password=newPsd)key="msg"msg="修改成功!"u = User.objects.filter(id=user["id"]).values()# 将更新后的数据同步session中request.session["user"] = u[0]else:key="failMsg"msg="修改失败,原密码不正确,你再想想!"return render(request, "user_center.html", {"typeList": types, key: msg})

退出功能实现

在header.html头部页面中,添加以下超链接

在urls.py文件中定义接收该请求的地址

path('user_logout/',views.user_logout),

在views.py文件中定义该函数处理请求

#退出登录
def user_logout(request):try:del request.session["isLogin"]del request.session["user"]except:print("在线时间超时,请重新登录")return redirect(index)

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

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

相关文章

开源模型应用落地-FastAPI-助力模型交互-进阶篇(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

离散数学,汉密尔顿图判定的实际问题,平面图,平面图的判定,欧拉公式,对偶图,五色定理的证明

目录 1.汉密尔顿图判定的实际问题 判断是否是汉密尔顿图 思考&#xff1a;下图中哪些是汉密尔顿图 例子 2.平面图 平面图的基本概念 并非所有的图都能嵌入平面 平面图的面与次数 欧拉公式 欧拉公式的证明 3.平面图的判定 同胚 kuratowski定理 ​4.对偶图 四…

从0到1搭建数据中台(4):neo4j初识及安装使用

在数据中台中&#xff0c;neo4j作为图数据库&#xff0c;可以用于数据血缘关系的存储 图数据库的其他用于主要用于知识图谱&#xff0c;人物关系的搭建&#xff0c;描述实体&#xff0c;关系&#xff0c;以及实体属性 安装 在官网 https://neo4j.com/ 下载安装包 neo4j-co…

TikTok内嵌跨境商城全开源_搭建教程/前端uniapp+后端源码

多语言跨境电商外贸商城 TikTok内嵌商城&#xff0c;商家入驻一键铺货一键提货 全开源完美运营&#xff0c;接在tiktok里面的商城内嵌&#xff0c;也可单独分开出来当独立站运营 二十一种语言&#xff0c;可以做很多国家的市场&#xff0c;支持商家入驻&#xff0c;多店铺等等…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2&#xff0c;MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据&#xff0c;登录新增随机数字验证码验证。具体可以看…

[Python库](4) time库

1.time库简介 time库可以进行时间相关的处理&#xff0c;如访问当前日期和时间&#xff0c;输出不同格式的时间以及等待指定的时间等。time不需要下载&#xff0c;直接导入就可以用( 因为它是Python自带的 )。更多功能可以看另一篇文章[Python库](3) Arrow库。 2.使用 2.1.返…

大数据之数据抽取架构演变过程

架构演变之Flink架构的演变过程 一、 起初搭建整个大数据平台是基于CDH这一套资源管理和整合的CM资源管理器搭建的 整个平台包括了&#xff1a; HDFS&#xff0c;YARN&#xff0c;HIVE&#xff0c;zoozie,FLINK,Spark,Zookeeper等组件搭建而成&#xff0c; 刚开始搭建的时候&am…

如何通过企业微信会话存档保护企业利益?

赵总: 张经理&#xff0c;最近行业内频发数据泄露事件&#xff0c;我们的客户资料和内部沟通记录安全吗&#xff1f; 张经理: 赵总&#xff0c;我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录&#xff0c;我们最近引入了安企神软件&#xff0c;它能很…

实践致知第16享:设置Word中某一页横着的效果及操作

一、背景需求 小姑电话说&#xff1a;现在有个word文档,里面有个表格太长&#xff08;如下图所示&#xff09;&#xff0c;希望这一个设置成横的&#xff0c;其余页还是保持竖的&#xff01; 二、解决方案 1、将鼠标放置在该页的最前面闪烁&#xff0c;然后选择“页面”》“↘…

记录些MySQL题集(16)

MySQL 存储过程与触发器 一、初识MySQL的存储过程 Stored Procedure存储过程是数据库系统中一个十分重要的功能&#xff0c;使用存储过程可以大幅度缩短大SQL的响应时间&#xff0c;同时也可以提高数据库编程的灵活性。 存储过程是一组为了完成特定功能的SQL语句集合&#x…

C语言 ——— 实用调试技巧(Visual Studio)

目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug&#xff1a;通常为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…

vscode通过ssh链接远程服务器上的docker

目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…

使用 XPath 定位 HTML 中的 img 标签

引言 随着互联网内容的日益丰富&#xff0c;网页数据的自动化处理变得愈发重要。图片作为网页中的重要组成部分&#xff0c;其获取和处理在许多应用场景中都显得至关重要。例如&#xff0c;在社交媒体分析、内容聚合平台、数据抓取工具等领域&#xff0c;图片的自动下载和处理…

ICP配准两个obj三维物体+关键点处形成立体小球球 +TRF算法(含有在ICP配准情境下的算法对应代码)

import os import shutil import numpy as np import cv2 import face_alignment import vtk from scipy.spatial import cKDTree from scipy.optimize import least_squaresdef load_obj(file_path):vertices = []faces = []with open

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

目录 引言Hadoop是什么&#xff1f;学习Hadoop的"糙快猛"之道1. 不要追求完美&#xff0c;先动手再说2. 从简单的MapReduce开始3. 利用大模型加速学习4. 循序渐进&#xff0c;建立知识体系 构建您的Hadoop技能树1. 夯实基础&#xff1a;Linux和Java2. 深入理解HDFS3.…

2024算力基础设施安全架构设计与思考(免费下载)

算网安全体系是将数据中心集群、算力枢纽、一体化大数据中心三个层级的安全需求进行工程化解耦&#xff0c;从国家安全角度统筹设计&#xff0c;通过安全 服务化方式&#xff0c;依托威胁情报和指挥协同通道将三层四级安全体系串联贯通&#xff0c;达成一体化大数据安全目标。 …

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序&#xff0c;使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…

html2canvas + jspdf 纯前端HTML导出PDF的实现与问题

前言 这几天接到一个需求&#xff0c;富文本编辑器的内容不仅要展示出来&#xff0c;还要实现展示的内容导出pdf文件。一开始导出pdf的功能是由后端来做的&#xff0c;然后发现对于宽度太大的图片&#xff0c;导出的pdf文件里部分图片内容被遮盖了&#xff0c;但在前端是正常显…

【Git】(基础篇四)—— GitHub使用

GitHub使用 经过上一篇的文章&#xff0c;相信大家已经对git的基本操作熟悉了&#xff0c;但哪些使用git的方法只是在本地仓库进行&#xff0c;本文介绍如何使用git和远程仓库进行连接使用。 Github和Gitee 主要用到的两个远程仓库在线平台是github和gitee GitHub GitHub …

【ARMv8/v9 GIC- 700 系列 2 -- GIC-700 上电控制寄存器 GICR_PWRR】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC-700 上电GICR_PWRR 寄存器字段介绍GICR_PWRR 功能说明GICR_PWER 代码配置GICR_PWRR 使用场景GICR_PWRR 注意事项GIC-700 上电 GICR_PWRR(功耗寄存器)是ARM GICv4架构中用于控制GIC-700是否可以关闭电源的寄存器。它通过几个位…