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

news2024/11/17 5:20:37

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.coloradmin.cn/o/98067.html

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

相关文章

Qt使用MSVC2015找不到编译器的解决办法

Qt使用MSVC2015找不到编译器的解决办法 1、问题描述 安装qt前&#xff0c;已安装vscode&#xff0c;构建套件MSVC2015 32/64bit出现红色感叹号&#xff0c;并报错构建套件中未设置编译器 2、解决办法 step1:通过windows SDK工具安装调试器。 工具下载地址&#xff1a;https:/…

244. 谜一样的牛——二分+树状数组

有 n 头奶牛&#xff0c;已知它们的身高为 1∼n 且各不相同&#xff0c;但不知道每头奶牛的具体身高。 现在这 n 头奶牛站成一列&#xff0c;已知第 i 头牛前面有 Ai 头牛比它低&#xff0c;求每头奶牛的身高。 输入格式 第 1 行&#xff1a;输入整数 n。 第 2…n 行&#x…

Linux——组管理和权限管理

Linux组 基本介绍 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外&#xff0c;在Linux中每个文件有所有者&#xff0c;所在组&#xff0c;其他组的概念。 所有者 一般为文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自然的成为该文件的所有者。 查…

构造序列(模拟构造)

请你构造一个 01 序列&#xff0c;序列需要满足以下所有要求&#xff1a; 恰好包含 n 个 0 和 m 个 1。不存在两个或两个以上的 0 连续相邻。不存在三个或三个以上的 1 连续相邻。 输入格式 共一行&#xff0c;包含两个整数 n,m。 输出格式 输出共一行&#xff0c;如果存在…

【js记录】递归进行深拷贝时对于Object遍历方法的思考【深浅拷贝+object县官属性介绍+类型判断方法+for...in+for...of】

一、 前言&#xff1a;本文使用的 类型判断方法介绍 通过手写instaceof更好理解其作用及使用 1、 typeof 判断一个实例属于哪种类型 2、 instance 判断一个实例是否属于某种类型let person function(){ } let no new person(); no instanceof person; // true3、 原型…

IT分销商未来在哪里?南京创瑞丰向复合型产品方案商转型

在一个充满不确定性的市场中&#xff0c;思变求新是企业的唯一出路。 诚如IT分销领域&#xff0c;云计算、大数据、人工智能等技术的兴起&#xff0c;加速企业数字化转型的同时&#xff0c;亦对于传统IT分销市场的未来产生了深远影响。过去“搬箱子”、打价格战的方式方法正在…

Python中文件操作(读、写、关闭)

目录 一.什么是文件 二.python文件操作 1.open&#xff08;&#xff09;打开函数 注意 mode常用的三种基础访问模式 2.读操作相关方法 read&#xff08;&#xff09;方法&#xff1a; readlines&#xff08;&#xff09;方法: readline&#xff08;&#xff09;方法 for…

Linux性能学习(1.1):CPU_CPU缓存

文章目录1 简介2 工作机制3 Cache Line参考资料&#xff1a; 1. https://www.makeuseof.com/tag/what-is-cpu-cache/ 2. https://zhuanlan.zhihu.com/p/80672073 3.CPU Cache 机制以及 Cache miss 4.性能优化方法和技巧 在日常的嵌入式开发中&#xff0c;查看一些SOC的datashe…

想学习编程,该怎么开始,需要多长时间?

想学习编程,该怎么开始&#xff0c;需要多长时间&#xff1f; 其实学编程也没有啥特别的方法&#xff0c;和我们没基础学驾照差不多。 考A照、B照还是C照&#xff0c;我们先得拎清&#xff0c;它们的用途存在一定差异 。一样的&#xff0c;学编程是学C&#xff0c;Java、Pyth…

命令行在服务器的Oracle新建、修改用户并授权

1.前提解说 由于我是使用docker拉取的Oracle,这里截图的Oracle用户是原本安装好的Oracle用户。 2.步骤 1.Linux服务器切换到Oracle su oracle 2. 进入SQL sqlplus / as sysdba 3.新建用户(一定要加“&#xff1b;”) create user 用户名 identified by 密码&#xff1b; 若是修…

Tableau可视化设计案例-02Tableau数据处理、折线图

文章目录Tableau可视化设计案例02Tableau数据处理、折线图1.数据前处理2.绘制折线图2.1 创建电影数据变化折线图2.2创建电影票房变化折线图2.3 20215年的电影数量与票房比较分析Tableau可视化设计案例 本文是Tableau的案例&#xff0c;为B站视频的笔记&#xff0c;B站视频 参考…

Java集合/泛型面试题

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

作为文科生,如何才能学好一门编程语言?

学习新知识的过程总是痛苦和逆人性的&#xff0c;古往今来皆是如此&#xff0c;否则也不会有十年寒窗苦读一说。 相信此刻看这篇文章的你&#xff0c;经历的寒窗绝对不止十年。 从小学开始算起到大学毕业&#xff0c;绝大多数人起码经历了16年&#xff08;跳级的神童与学霸除…

5G无线技术基础自学系列 | 单站点验证测试

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 单站点验证工作是通过测试来进行功能性…

二级MS Office真题第8套完整解析

全国计算机等级考试二级新增预测第一套 一、文字处理 公司将于今年举办“创新产品展示说明会”&#xff0c;市场部助理小王需要将会议邀请函制作完 成&#xff0c;并寄送给相关的客户。现在&#xff0c;请你按照如下需求&#xff0c;在Word.docx文档中完成制作工作&#xff1a;…

非零基础自学Golang 第11章 文件操作 11.1 目录基本操作 11.1.1 列目录

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.1 目录基本操作11.1.1 列目录第11章 文件操作 计算机文件是以硬盘为载体的信息存储集合&#xff0c;文件可以是文本、图片、程序等。在编写程序时&#xff0c;我们经常会和文件打交道&#xff0c;比如从文件读…

推送github一直超时以及输入密码提示2021年8月以后密码不能用解决

最近推送github常常出现443端口超时&#xff0c;查询了很多办法最后用了如下方法解决 首先电脑设置里面搜索代理服务器设置&#xff0c;记住这个端口 用上面的地址和端口运行如下命令 git config --global http.proxy http://127.0.0.1:31181 git config --global https.pro…

小学生C++画图 Go C 编程 第8课 魔法计时器(魔法学院的奇幻之旅 Go C编程绘图)

Goc编程第一课 Goc编程第一课_哔哩哔哩_bilibili Goc编程第一课扩展加复习 Goc编程第一课扩展加复习_哔哩哔哩_bilibili Goc编程第二课 Goc编程第二课_哔哩哔哩_bilibili Goc编程第三课 Goc编程第三课_哔哩哔哩_bilibili Goc编程第四课 Goc编程第四课_哔哩哔哩_bilibili G…

JSCharting JavaScript 3.3.X 12/17/2022 Crack

JSCharting JavaScript 图表库 每个 JSCharting 许可证包括全套 150 多种高级图表类型以及交互式股票图表、无缝网格和日历支持、JavaScript 地图、甘特图、JavaScript 组织结构图和微型图表,企鹅Ω578867473。 画廊 在每台设备上满足每一种需求的图表类型&#xff01; 包括条形…