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

第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.xdnf.cn/news/9101.html

相关文章:

  • 数据仓库维度建模详细过程
  • 频繁报FTPResponse 421 received.Server closed connection
  • 1. 数据结构
  • 《软件工程》第 8 章 - 人机交互设计
  • QML设计登录界面
  • 基于FPGA的IIC多通道选择器(IIC Switch/Bridge)
  • Qt popup窗口半透明背景
  • mac for vscode集成的源代码管理 撤销和删除文件报错Permission denied
  • 【Macos】安装前端环境rust+node环境
  • 从界面设计到设备互联:基于Qt的ARM Linux自动化控制面板开发全解析
  • 【图像处理基石】什么是色彩模式?
  • 深度学习在建筑物提取中的应用综述
  • 【Qt开发】输入类控件
  • C语言初阶--结构体
  • 高性能排行榜系统架构实战
  • 解码词向量:让AI语言模型更透明
  • Leetcode 3563. Lexicographically Smallest String After Adjacent Removals
  • 基于Flask实现当当网书籍数据分析大屏
  • 清除谷歌浏览器中的“您的浏览器由所属组织/贵单位管理”
  • 《软件工程》第 2 章 -UML 与 RUP 统一过程
  • GitHub Page填写域名显示被占用
  • (转)Docker与K8S的区别
  • Java中Map集合的遍历方式详解
  • 【监控】PromQL 查询语言
  • vscode连接的linux服务器,上传项目至github
  • 开启MySQL的binlog日志
  • 每天掌握一个Linux命令 - ab(Apache Benchmark)
  • 进程IO之 进程
  • 组态王KingSCADA4.0连接1200PLC实战教程以及麒麟版问题说明
  • 【Spring Boot 实战】使用 HTTP 响应压缩优化接口性能