第12次04 :首页展示用户名

登录后,跳转到首页,首页会展示用户名;未登录时,首页将展示登录与注册的选项。

第一步:index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>小鱼商城-首页</title><link rel="stylesheet" type="text/css" href="{{ static('css/reset.css') }}"><link rel="stylesheet" type="text/css" href="{{ static('css/main.css') }}"><script type="text/javascript" src="{{ static('js/jquery-1.12.4.min.js') }}"></script><script type="text/javascript" src="{{ static('js/vue-2.5.16.js') }}"></script><script type="text/javascript" src="{{ static('js/axios-0.18.0.min.js') }}"></script>
</head>
<body><div id="app"><div class="header_con"><div class="header"><div class="welcome fl">欢迎来到小鱼商城!</div><div class="fr"><div v-if="username" class="login_btn fl">欢迎您:<em>[[ username ]]</em><span>|</span>
{#                    <a href="{{ url('users:logout') }}">退出</a>#}</div><div v-else class="login_btn fl"><a href="{{ url('users:login') }}">登录</a><span>|</span><a href="{{ url('users:register') }}">注册</a></div>
{#				<div class="user_link fl">#}
{#					<span>|</span>#}
{#					<a href="{{ url('users:info') }}">用户中心</a>#}
{#					<span>|</span>#}
{#					<a href="cart.html">我的购物车</a>#}
{#					<span>|</span>#}
{#					<a href="user_center_order.html">我的订单</a>#}
{#				</div>#}</div></div></div><div class="footer"><div class="foot_link"><a href="#">关于我们</a><span>|</span><a href="#">联系我们</a><span>|</span><a href="#">招聘人才</a><span>|</span><a href="#">友情链接</a></div><p>CopyRight © 2024 北京小鱼商业股份有限公司 All Rights Reserved</p><p>电话:010-****888    京ICP备*******8号</p></div></div><script type="text/javascript" src="{{ static('js/common.js') }}"></script><script type="text/javascript" src="{{ static('js/slide.js') }}"></script><script type="text/javascript" src="{{ static('js/index.js') }}"></script>
</body>
</html>

第二步:补充后端代码,在登录与注册视图中增加设置cookie的语句

LoginView

class LoginView(View):def get(self, request):return render(request, 'login.html')def post(self, request):username = request.POST.get('username')password = request.POST.get('password')remembered = request.POST.get('remembered')if not all([username, password]):return HttpResponseForbidden('缺少必须参数')if not re.match(r'^[a-zA-Z0-9_-]{5,20}$', username):return HttpResponseForbidden('请输入正确的用户名')if not re.match(r'^[a-zA-Z0-9]{8,20}$', password):return HttpResponseForbidden('密码8-20位')user = authenticate(username=username, password=password)if user is None:return render(request, 'login.html', {'account_errmsg': '账号或密码错误'})login(request, user)print(request.session.session_key)if remembered != 'on':request.session.set_expiry(0)else:request.session.set_expiry(None)  # 2周过期# 新增写入cookieresponse = redirect(reverse('contents:index'))response.set_cookie('username', user.username, max_age=3600 * 24 * 14)return response

注册视图

class RegisterView(View):def get(self, request):return render(request, 'register.html')def post(self, request):username = request.POST.get('username')password = request.POST.get('password')password2 = request.POST.get('password2')mobile = request.POST.get('mobile')allow = request.POST.get('allow')if not all([username, password, password2, mobile, allow]):return HttpResponseForbidden('缺少必要参数')if not re.match(r'^[a-zA-Z0-9_-]{5,20}$', username):return HttpResponseForbidden('请输入5-20位的用户名')if not re.match(r'^[a-zA-Z0-9]{8,20}$', password):return HttpResponseForbidden('请输入8-20位的密码')if password != password2:return HttpResponseForbidden('两次密码不一致')if not re.match(r'^1[3-9]\d{9}$', mobile):return HttpResponseForbidden('请输入正确的手机号')if allow != 'on':return HttpResponseForbidden('请勾选协议')try:user = User.objects.create_user(username=username, password=password, mobile=mobile)except DatabaseError:render(request, 'register.html', {'register_errmsg': '注册失败'})login(request, user)# 新增设置cookieresponse = redirect(reverse('contents:index'))response.set_cookie('username', user.username, max_age=3600 * 24 * 14)return response

第三步:在users应用中增加退出登录的视图类,完成清除cookie和重定向到首页的逻辑,并配置路由

from django.contrib.auth import logout
class LogoutView(View):"""退出登录"""def get(self, request):# 清除登录信息logout(request)# 响应,重定向到首页response = redirect(reverse('contents:index'))# 删除cookieresponse.delete_cookie('username')return response

配置路由,users应用下子路由新增

path('logout/', views.LogoutView.as_view(), name='logout'),

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

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

相关文章

Flask 路由跳转机制:url_for生成动态URL、redirect页面重定向

在 Flask 开发中&#xff0c;url_for() 与 redirect() 是实现路由跳转逻辑的核心工具。 url_for()负责安全、灵活地生成 URL。 redirect()负责发起重定向响应。 1、url_for()&#xff1a;生成URL url_for(endpoint, **values) 是 Flask 提供的 URL 构造工具&#xff0c;可根据…

华为OD机试真题——构成正方形的数量(2025B卷:100分)Java/python/JavaScript/C++/C/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《构成…

FFMPEG-AAC编码

一、流程图 二、代码解释 avcodec_find_encoder: 根据指定的AVCodecID查找注册的编码器。avcodec_alloc_context3: 为AVCodecContext分配内存。()avcodec_open2: 打开编码器。avcodec_send_frame: 将AVFrame⾮压缩数据给编码器。avcodec_receive_packet: 获取到编码后的…

RPC 协议详解、案例分析与应用场景

一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务&#xff0c;其实现过程涉及多个关键组件与流程。 &#xff08;一&#xff09;核心组件 客户端&#xff08;Client&#xff09;&#xff1a;发起远程过程调用的一方&#xff0c;它并不关心调…

Docker基础 -- Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南

Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南 作者&#xff1a; &#xff08;填写作者&#xff09; 发布日期&#xff1a; 2025‑05‑26 1 背景与目标 在企业内网&#xff08;需要代理&#xff09;环境下&#xff0c;我们需要一套可靠、可复用的 Ubuntu 22.04 交叉编…

【ISP算法精粹】ISP算法管线的预处理算法有哪些?

1. ISP预处理算法有哪些&#xff1f; 在图像信号处理&#xff08;ISP&#xff09;流程中&#xff0c;预处理阶段主要针对图像传感器&#xff08;如CMOS/CCD&#xff09;输出的原始图像数据&#xff08;通常为拜耳格式的RAW图像&#xff09;进行初步处理&#xff0c;以校正硬件…

华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

视频存储开源方案

项目成熟度 GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. GitHub - seaweedfs/seaweedfs: SeaweedFS i…

典型城市工况数据(Drive Cycle)用于车辆仿真

典型城市工况数据&#xff08;Drive Cycle&#xff09;用于车辆仿真 在车辆仿真过程中&#xff0c;使用典型的城市工况数据&#xff08;Drive Cycle&#xff09;是评估车辆性能、能耗和排放的关键步骤。以下是一些常用的典型城市工况数据及其来源&#xff0c;这些数据可以帮助…

深度解析新能源汽车结构与工作原理

一、核心系统架构 新能源汽车主要由三大核心系统构成&#xff1a; 电力驱动系统&#xff1a;包含永磁同步电机、电机控制器&#xff08;MCU&#xff09;及减速器&#xff0c;采用三合一集成设计实现轻量化。永磁同步电机通过电磁感应原理将电能转化为机械能&#xff0c;其效率可…

跳板问题(贪心算法+细节思考)

首先直接看题&#xff1a; 这题直接贪心其实问题不大&#xff1a; 下面先展示我的一个错误代码&#xff1a; # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…

pgsql 一些用法

要查询PostgreSQL数据库中剩余的磁盘空间&#xff0c;可以使用以下方法&#xff1a; 使用SQL查询函数&#xff1a; 可以通过pg_size_pretty函数来查看数据库的总磁盘使用情况&#xff0c;例如&#xff1a; SELECT pg_size_pretty(pg_database_size(‘your_database_name’)); …

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球 文章目录 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球前言高斯函数一维高斯多维高斯 椭球基本定义一般二次形式 3D高斯椭球3D高斯与椭球的关系各向同性(Isotropic)和…

unix的定时任务和quartz和spring schedule的cron表达式区别

一、核心区别对比表 对比项Unix CrontabQuartzSpring Scheduled表达式位数5 位6 位或 7 位6 位秒级支持❌ 不支持&#xff08;最小单位是分钟&#xff09;✅ 支持✅ 支持年字段❌ 无✅ 可选第7位❌ 不支持特殊符号支持较少&#xff08;如 *, ,, -, /&#xff09;很丰富和 Quar…

C++基础算法————递推

C++递推:初学者的进阶之旅 一、引言 在计算机编程的世界里,C++ 以其强大的功能和高效性受到众多开发者的青睐。递推作为一种重要的编程思想,在解决各种复杂问题时发挥着关键作用。对于初学者来说,理解并掌握递推不仅可以提升编程能力,还能培养逻辑思维和问题解决能力。本…

QTabWidget垂直TabBar的图标和文本水平显示

一般情况下,我们可以通过QTabWidget的setTabPosition方法来设置TabBar的位置,比如设置在左边 ui->tabWidget->setTabPosition(QTabWidget::West); 但是此时图标和文字都是垂直的,如果让它们水平显示呢? 一.效果 二.原理 在绘制TabBar时,顺时针旋转90度 三.实现 …

HCIP-AI培养计划,成为新时代AI解决方案架构高级工程师

01 华为认证是什么&#xff1f; 华为认证&#xff08;Huawei Certification&#xff09;是面向数字化时代构建的ICT人才培训与认证体系。 当前超过68万来自全球180多个国家和地区的各行业精英已经取得华为认证&#xff0c;如今全球每年超过10万名学员通过考试获得华为认证。 华…

【RabbitMQ】基于Spring Boot + RabbitMQ 完成应用通信

文章目录 需求描述创建项目订单系统(生产者)完善配置声明队列下单接口启动服务 物流系统(消费者)完善配置监听队列启动服务 格式化发送消息对象SimpleMessageConverter定义一个对象生产者代码消费者运行程序 JSON定义一个对象生产者代码定义转换器消费者代码运行程序 需求描述 …

OpenGL Chan视频学习-7 Writing a Shader inOpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再整理具体函数了&#xff0c;网站直接翻译会更直观也会…

Vue 3.0中复杂状态如何管理

在现代前端应用中&#xff0c;状态管理扮演着至关重要的角色。一个良好的状态管理方案能够&#xff1a; 1. 保持应用数据的一致性和可预测性&#xff1b; 2. 简化组件间的通信和数据共享&#xff1b; 3. 提高代码的可维护性和可测试性&#xff1b; 4. 优化应用性能&#xf…