DJANGO-天天生鲜项目从0到1-004-用户模块-个人中心页
本项目基于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-用户模块-个人中心页的更多相关文章
- django天天生鲜项目
.后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...
- DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-007-首页静态化与缓存
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- python 天天生鲜项目
python 天天生鲜项目 django版:https://github.com/Ivy-1996/fresh flask版:https://github.com/Ivy-1996/flask-fre ...
- Django之天天生鲜项目
准备工作 1.配置settings.py内置文件 注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常 2.创建应用 3.配置主路由 一 ...
- DJANGO-天天生鲜项目从0到1-011-订单-订单提交和创建
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-009-购物车-Ajax实现添加至购物车功能
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-009-搜索功能实现(django-haystack+whoosh+jieba)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-006-首页-内容展示
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
随机推荐
- 01[了解] Dubbo
什么是Dubbo? 概述 Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源. 由于Dubbo在阿里内部经过广泛的业务验证,在很短时间内,Dubbo就被许多互联网公司所采用,并产生 ...
- Java 从入门到进阶之路(二十七)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map. Map 接口定义的集合又称查找表,用于存储所谓“Key-Value” ...
- tkinter的三种几何布局管理类
1.pack() 主要采用块的方式组织子组件 如下: import tkinter root=tkinter.Tk() #创建窗口对象 label=tkinter.Label(root,text='h ...
- 关于Spring Boot中的业务层(Service)是否要创建接口的分析
在借助Spring Boot框架开发web项目时,在业务层(Service)这一部分,标准做法是:定义一个接口,然后再一个或多个类去实现.那么疑问来了: 为什么我们要维护两份同构代码,而不直接使用一个 ...
- bitbucket的简单使用
1.如果你已经把项目建好的话,那么提交上去这样:没有构建本地仓库的话,那先打包本地,到你的项目路径上去后git initgit remote add origin https://linjiayu@b ...
- Electron 初识-搭建一个简易桌面应用
Electron 快速入门 简介 Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用.你可以把它看作是专注于桌面应用而不是 web 服务器的,io.j ...
- 状压DP之中国象棋
题目 传送们 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方 ...
- ssh安全远程管理
1.什么是ssh SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效 ...
- day15 名称空间与作用域
目录 一.参数补充 1 命名关键字参数(了解) 二.名称空间 1.内置名称空间 2.全局名称空间 3.局部名称空间 4.名称空间的加载与销毁顺序 三.作用域 一.参数补充 1 命名关键字参数(了解) ...
- java 数据结构(二):java常用类 二 StringBuffer、StringBuilder
1.String.StringBuffer.StringBuilder三者的对比String:不可变的字符序列:底层使用char[]存储StringBuffer:可变的字符序列:线程安全的,效率低:底 ...