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= ...
随机推荐
- 03.基于测试开发讲解和Cobertura框架介绍
首先我们先 CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(200) DEFAULT ...
- base64格式的图片上传阿里云
base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...
- sublime清空控制台
解决方法 – 只需运行print('\n'*100)打印100个换行符,您将无法看到任何以前的输出,除非你向上滚动一些距离.
- 几个常见CSS错误和解决办法
1.IE6下,当float存在时,margin双倍的问题 解决方法:加display:inline; 例: #content { float: left; width: 500px; ...
- Redis系列(九):数据结构Hash之HDEL、HEXISTS、HGETALL、HKEYS、HLEN、HVALS命令
1.HDEL 从 key 指定的哈希集中移除指定的域.在哈希集中不存在的域将被忽略. 如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回0. 时间复杂度:O(N) N是被删除的 ...
- Centos7-Docker1.12开启守护进程(远程调用)
本文讲述了Docker1.12.6在Linux下开启守护进程(远程调用),理论上来说其他版本也是一样的改法,博主参考很多都是巨坑,综合自己实战分享给大家,如有错误请留言; - 修改配置 1.修改 do ...
- js写一个简单的九九乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Kafka消费者拉取数据异常Unexpected error code 2 while fetching data
Kafka消费程序间歇性报同一个错: 上网没查到相关资料,只好自己分析.通过进一步分析日志发现,只有在拉取某一个特定的topic的数据时报错,如果拉取其他topic的数据则不会报错.而从这个异常信息来 ...
- P3261 [JLOI2015]城池攻占 题解
题目 小铭铭最近获得了一副新的桌游,游戏中需要用 \(m\) 个骑士攻占 \(n\) 个城池.这 \(n\) 个城池用 \(1\) 到 \(n\) 的整数表示.除 \(1\) 号城池外,城池 \(i\ ...
- 工作那么久,才知道的 SOLID 设计原则
认识 SOLID 原则 无论是软件系统设计,还是代码实现,遵循有效和明确的设计原则,都利于系统软件灵活可靠,安全快速的落地,更重要的是能灵活地应对需求,简化系统扩展和维护,避免无效的加班.本文主要讨论 ...