18.Django大型项目之用户中心页面

news/2024/9/22 18:30:58/

1. 用户中心的搭建

1.1 基础搭建

在这里插入图片描述
这里,主要就是基础的页面渲染,使用的也是继承主模板,对其进行修改的方式。就直接看代码吧

1.2 上下文的应用

什么是上下文?
对于上下文,可以理解成一个公用的函数或者类
我们这里使用上下文,top.html页面中,如果用户登录时候,就获取用户账号,展示“欢迎******”;如果用户未登录的话,就展示欢迎页面。所以,对于每个位置的顶层都是需要此功能,所以就采用了上下文。
如何实现上下文?

  1. 注册或者登录后,序列化用户对象后保存到session中
  2. 在上下文函数中尝试获取用户对象,如果存在反序列化处理后返回。
  3. 配置settings
  4. 前端判断返回值是否存在

1.3 代码展示

templates

<!-- netshop/templates/top.html -->
{% load static %}
<div class="head"><div class="head-in"><ul class="options"><li class="sub"><a href="http://127.0.0.1:8000/?category=2#">我的订单</a></li><li class="sub"><a href="http://127.0.0.1:8000/?category=2#">客户服务</a></li><li class="sub"><a href="http://127.0.0.1:8000/cart/cart.html">我的购物车</a></li></ul>{% if userInfo %}<div class="register">欢迎 {{ userInfo.uname }}</div>{% else %}<div class="register"><a href="/userapp/register/">免费注册</a></div><div class="sign"><a href="http://127.0.0.1:8000/user/login">登录</a></div>{% endif %}</div>
</div>
{% extends 'base.html' %}
{% block title %}用户中心{% endblock %}
{% load static %}
{% block main %}
<input type="hidden" name="csrfmiddlewaretoken"value="SSm6OhZlgtgLmmLi07RWmPYijzLpebaCh0pFbf57zYddklUSB4EBEks157EvG81b">
<div class="Bott"><div class="wrapper clearfix" style="margin: 0 auto"><div class="zuo fl" style="margin-left: 100px"><h3><a href="http://127.0.0.1:8000/"><img src="{% static 'images/tx.png' %}"></a><p class="clearfix"><span class="fl">[{{userInfo.uname}}]</span><span class="fr logout">[退出登录]</span></p></h3><div><ul><li><a href="http://127.0.0.1:8000/user/usercenter/#">我的订单</a></li></ul><ul><li><a href="http://127.0.0.1:8000/user/address/">地址管理</a></li></ul><ul><li><a href="http://127.0.0.1:8000/">回到首页</a></li></ul></div></div><div class="you fl"><div class="tx clearfix"><div class="fl clearfix"><a href="http://127.0.0.1:8000/user/usercenter/#" class="fl"><img src="{% static 'images/tx.png' %}"></a><p class="fl"><span>六六六</span><a href="http://127.0.0.1:8000/user/usercenter/#">修改个人信息&gt;</a></p></div><div class="fr">绑定邮箱:12****4@**.com</div></div><div class="bott"><div class="clearfix"><a href="http://127.0.0.1:8000/user/usercenter/#" class="fl"><img src="{% static 'images/gxin1.jpg' %}"></a><p class="fl"><span>待支付的订单:<strong>0</strong></span><a href="http://127.0.0.1:8000/user/usercenter/#">查看待支付订单&gt;</a></p></div><div class="clearfix"><a href="http://127.0.0.1:8000/user/usercenter/#" class="fl"><img src="{% static 'images/gxin2.jpg' %}"></a><p class="fl"><span>待收货的订单:<strong>0</strong></span><a href="http://127.0.0.1:8000/user/usercenter/#">查看待收货订单&gt;</a></p></div></div></div></div>
</div>{% endblock %}{% block footerjs %}
<script>$('.logout').click(function () {$.ajax({type: 'post',url: '/user/logout/',data: 'csrfmiddlewaretoken=' + $('input[name="csrfmiddlewaretoken"]').val(),success: function (data) {window.location = '/user/login/'}})})
</script>
{% endblock %}

settings

import os
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages','userapp.myContext.getUserInfo',],},},
]

上下文

# netshop\userapp\myContext.py 应用上下文
import jsonpickle
# 获取用户对象信息
def getUserInfo(request):# 从session对象获取用户 该用户是字符串user = request.session.get('user')# 将字符串反序列化为对象if user:user = jsonpickle.loads(user)return {'userInfo':user}

views视图

# netshop\userapp\views.py
from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from userapp.models import *
import jsonpickle
# Create your views here.
# 注册视图类
class Register(View):def get(self,request):# 跳转到注册页面return render(request, 'userapp/register.html')def post(self,request):# 完成注册# 1.获取表单数据uname = request.POST.get('account','')pwd = request.POST.get('password','')# 2.查询数据库是否已有该用户try:user = UserInfo.objects.get(uname=uname, pwd=pwd)return render(request,'userapp/register.html')except UserInfo.DoesNotExist:user = UserInfo.objects.create(uname=uname, pwd=pwd)request.session['user'] = jsonpickle.dumps(user) # 把用户对象序列化为字符串return redirect('/userapp/center/') # 重定向到用户中心(路由地址)# 用户中心
def userCenter(request):return render(request, 'userapp/center.html')

http://www.ppmy.cn/news/4573.html

相关文章

make 报错 *** recipe commences before first target. Stop.

背景 学习linux设备驱动&#xff0c;写第一个hello world程序&#xff0c;make报错&#xff1a; edenubuntu:~/Documents/Project/scull/hello_world$ make Makefile:17: *** recipe commences before first target. Stop. 原因 最后查明原因是我的target多了tab Makefile的…

[山东科技大学OJ]2622 Problem I: 数组元素计数 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB Submit: 1032 Solved: 782 [Submit][Status] Description 输出一个数组中与指定数字相同的元素的个数。 ----------------------------------------------------------------------------- 结合“Append Code”中的代码&#xff0c;编…

uboot启动流程

目录 1. 从汇编到C语言 1. 从汇编到C语言 uboot整个程序的入口是 ./arch/arm/lib/vectors.S 的 start 其中&#xff0c;reset 来自于 ./arch/arm/cpu/armv7/start.S&#xff0c; ./arch/arm/cpu/armv7/start.S 程序的执行路径为 reset --> save_boot_params_ret --> cp…

Java集合/泛型面试题

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

1. Scss 基础使用

1. Scss 基础使用 1. 语法格式 Sass 有两种语法格式。首先是 SCSS (Sassy CSS) &#xff0c;这种格式仅在 CSS3 语法的基础上进行拓展&#xff0c;所有 CSS3 语法在 SCSS 中都是通用的&#xff0c;同时加入 Sass 的特色功能。此外&#xff0c;SCSS 也支持大多数 CSS hacks 写…

接口测试(十)—— telnet和python代码测试dubbo接口

目录 一、传智健康项目介绍 1、项目描述 2、目标用户群体 3、项目模块 4、系统框架 二、Dubbo接口测试 1、RPC 2、Dubbo 3、查阅API文档 三、Telnet工具远程调用 1、启用telnet 2、telnet远程连接服务 3、telnet调用服务接口 四、python借助dubbo远程调用 1、安…

LeetCode HOT 100 —— 301.删除无效的括号

题目 给你一个由若干括号和字母组成的字符串 s &#xff0c;删除最小数量的无效括号&#xff0c;使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 思路 DFS 回溯算法&#xff1a; 首先最终合法的方案&#xff0c;必然有左括号的数量 右括号的数量 …

HCIE-12.9 杭州战报

一、前言 本篇文章是本人12.9日在杭州参加HCIE-RS考试的战报&#xff0c;供在元旦之前参加HCIE-RS考试赶末班车的大佬们参考&#xff0c;近期不参加考试的大佬们可以不用理会。 近期HCIE顺利通过&#xff0c;下一步计划更新前两年在学习数学建模过程中的有关笔记&#xff0c;有…