本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习

https://www.bilibili.com/video/BV1vt41147K8?p=1

自定义模型管理器类(models.Manager)

一般我们会使用预定义的模型的管理器类的方法去进行一些操作,比如查询地址模型类的所有数据:Address.objects.all(),其中Address.objects返回的就是models.Manager的对象

当我们需要重写一些预定义的方式时,如重写.all(),让其默认添加一些筛选条件;或者想让新增自定义的方法时,就需要重新定义models.Manager类

这里我们让地址类返回用户默认的收货地址:

在models.py中的原模型类上添加objects属性:objects = Address.Manager()

class Address(BaseModel):
'''地址模型类'''
user = models.ForeignKey('User', on_delete=models.CASCADE)
receiver = models.CharField(verbose_name='收货人', max_length=)
address = models.CharField(verbose_name='收货地址', max_length=)
zip_code = models.CharField(verbose_name='邮编', max_length=, null=True)
phone = models.CharField(verbose_name='电话号码', max_length=)
is_default = models.BooleanField(verbose_name='是否默认', default=False) objects = AddressManager()

在models.py中新增Address.Manager()类

class AddressManager(models.Manager):
'''用户地址模型管理器类''' # 自定义模型管理器类,用来修改原有方法或者新增方法
def get_default_address(self, user):
'''获取用户默认收货地址'''
try:
address = self.get(user=user, is_default=True)
except Address.DoesNotExist:
address = None
return address

在视图中直接调用Address.objects.get_default_address(request.user)

def get(self, request):
'''显示用户收货地址'''
self.context['type'] = 'address'
# 获取默认收货地址
address = Address.objects.get_default_address(request.user)
self.context['address'] = address
return render(request, self.template_name, self.context)

使用django-redis实现django与redis交互

django-redis 基于 BSD 许可, 是一个使 Django 支持 Redis cache/session 后端的全功能组件.

安装django-redis

pip install django-redis

修改caches缓存设置

# django 缓存设置cache: 使用redis数据库当做缓存的存储位置

CACHES = {
  "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379/1",
    "OPTIONS": {
      "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
  }
}

连接redis数据库

原始连接写法:StrictRedis

这种写法只需要pip install redis即可,没有用到上面的djang-redis

from redis import StrictRedis
#创建连接对象
connect = StrictRedis(host='localhost', port=6379, db=0)
#简写
#connect=StrictRedis()
#操作数据库
result = connect.set('name', 'gong')

使用djang-redis:get_redis_connection

这种写法使用到了上面配置的连接‘default’

from django_redis import get_redis_connection

# 获取历史浏览记录
# 连接redis数据库
connect = get_redis_connection('default')
# 获取当前用户key值,格式为history_userid
history_key = 'history_%d'%(user.id)
# 获取最新的五条历史记录
history_list = connect.lrange(history_key, 0, 4)
# 获取商品对象
goods_list = [Goods.objects.get(id=i) for i in history_list]

DJANGO-天天生鲜项目从0到1-004-用户模块-个人中心页的更多相关文章

  1. django天天生鲜项目

    .后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...

  2. DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  3. DJANGO-天天生鲜项目从0到1-007-首页静态化与缓存

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  4. python 天天生鲜项目

    python 天天生鲜项目 django版:https://github.com/Ivy-1996/fresh flask版:https://github.com/Ivy-1996/flask-fre ...

  5. Django之天天生鲜项目

    准备工作 1.配置settings.py内置文件 注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常 2.创建应用 3.配置主路由 一 ...

  6. DJANGO-天天生鲜项目从0到1-011-订单-订单提交和创建

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  7. DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  8. DJANGO-天天生鲜项目从0到1-009-购物车-Ajax实现添加至购物车功能

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  9. DJANGO-天天生鲜项目从0到1-009-搜索功能实现(django-haystack+whoosh+jieba)

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  10. DJANGO-天天生鲜项目从0到1-006-首页-内容展示

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

随机推荐

  1. 上位机面试必备——TCP通信灵魂二十问【下】

    上篇文章跟大家介绍了TCP通信常见的前10个面试题,没看过的小伙伴可以点击下方链接进行查看: 上位机面试必备——TCP通信灵魂二十问[上] 今天就后面的10个面试题接着做下说明:欢迎关注[dotNet ...

  2. SSTI-服务端模板注入漏洞

      原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露.代码执行.GetShell ...

  3. 主机Redis服务迁移到现有Docker Overlay环境

    记录最后一次对中型2C企业级项目的容器化改造 hello, 好久不见,之前文章记录了一个实战的2C分布式项目的改造过程,结果如下: 其中Redis并未完成容器化改造(目前是主机单点),本文记录将Red ...

  4. 入门大数据---Hbase协处理器详解

    一.简述 Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立"二级索引",难以执 行求和.计数.排序等操作.比如,在旧版本的(<0.92)Hbase 中,统计数 ...

  5. 读取和写入blob类型数据

    读写oracle  blob类型 http://zyw090111.iteye.com/blog/607869 http://blog.csdn.net/jeryjeryjery/article/de ...

  6. Yarn的安装和全局配置(源/缓存位置/全局安装位置)

    本文安装环境: Win10 64位 前置条件: 已安装好Node环境(参考Node安装与环境配置) 下载和安装 Yarn安装包下载地址 全局配置 控制台输入命令, 正常显示版本表示安装成功 $ yar ...

  7. 数据库基础01-SQL基础语法

    数据库查询语言(Structured Query Language) 数据库查询语言: DDL(data definition language) -数据定义语言,建库建表 DML (data man ...

  8. CF3D Least Cost Bracket Sequence 题解

    题目 This is yet another problem on regular bracket sequences. A bracket sequence is called regular, i ...

  9. HTTP响应头拆分/CRLF注入详解

    转自:https://blog.csdn.net/gstormspire/article/details/8183598 https://blog.csdn.net/cqf539/article/de ...

  10. [JAVA]解决不同浏览器下载附件的中文名乱码问题

    附件下载时,遇到中文附件名的兼容性问题,firefox.chrome.ie三个派系不兼容,通过分析整理,总结出处理该问题的办法,记录如下: 1.文件名编码 服务器默认使用的是ISO8859-1,而我们 ...