本项目基于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=120) address = models.CharField(verbose_name='收货地址', max_length=400) zip_code = models.CharField(verbose_name='邮编', max_length=6, null=True) phone = models.CharField(verbose_name='电话号码', max_length=11) 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]
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=120) address = models.CharField(verbose_name='收货地址', max_length=400) zip_code = models.CharField(verbose_name='邮编', max_length=6, null=True) phone = models.CharField(verbose_name='电话号码', max_length=11) 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]