Django 项目总结(5)- 地址管理

地址管理

实现用户地址的管理,主要业务逻辑:

  • 省市区地址的数据库的建立与查询
  • 用户地址的增删改查处理
  • 设置默认地址
  • 设置地址标题

在用户录入地址时,需要进行省市区的选择。在页面加载时,向后端请求省份数据,当用户选择确定省份后,向后端请求该省份的城市数据;在用户选择确定城市数据后,向后端请求该城市的区县信息。这个过程称为省市区三级联动。




省市区地址的三级联动:

创建省市区的数据表,采用自关联的方式;

数据表设计:

  • 自关联字段的外键指向自身, ForeignKey(‘self’)
  • 使用 related_name 指明查询一个行政区划的所有下级行政区划时,使用哪种语法查询;
    迁移数据库,导入数据
  1. 请求有两种方式:'list','retrieve'list 请求省份数据,retrieve 根据上级 id 请求数据;

  2. 让视图继承自ReadOnlyModelViewSet,这个视图集继承自 'mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet',会自动执行 list(多条数据)和 retrieve(单个数据)的查询;

  3. 重写 get_querysetget_serializer_class 方法,进行判断,对应两种请求方式来写对应的 查询结果集 和 序列化器;

  4. list 的查询结果集和序列化器没什么难度,

  5. retrieve 的查询结果集在底层会自动以 id 为过滤条件来进行重新查询,

class RetrieveModelMixin(object):
	"""
	Retrieve a model instance.
	"""
def retrieve(self, request, *args, **kwargs):
    instance = self.get_object()  # 返回过滤过的查询结果集
    serializer = self.get_serializer(instance)
    return Response(serializer.data)        
  1. retrieve 的序列化器需要查询出子级信息 subs,进行返回;

  2. 城市信息和区划信息是同一个接口




使用缓存

省市区的数据是经常被用户查询使用的,而且数据基本不变化,所以我们可以将省市区数据进行缓存处理,减少数据库的查询次数。

在Django REST framework中使用缓存,可以通过drf-extensions扩展来实现。

因为省市区视图使用了视图集,并且视图集中有提供ListModelMixin和RetrieveModelMixin的扩展(由ReadOnlyModelViewSet提供),所以可以直接添加CacheResponseMixin扩展类,就相当于在 list 和 retrieve 方法添加了装饰器 @cache_response,就可以使用缓存了

在配置文件中设置将缓存数据保存在 redis 中,设置有效期

当数据库进行查询时,会将缓存保存在 redis 中,下一次请求时会优先访问缓存




用户地址管理:

创建用户地址模型类,

添加视图:用户地址列表数据,保存用户地址数据,处理删除(逻辑删除),设置默认地址,修改标题

添加对应序列化器

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值