地址管理
实现用户地址的管理,主要业务逻辑:
- 省市区地址的数据库的建立与查询
- 用户地址的增删改查处理
- 设置默认地址
- 设置地址标题
在用户录入地址时,需要进行省市区的选择。在页面加载时,向后端请求省份数据,当用户选择确定省份后,向后端请求该省份的城市数据;在用户选择确定城市数据后,向后端请求该城市的区县信息。这个过程称为省市区三级联动。
省市区地址的三级联动:
创建省市区的数据表,采用自关联的方式;
数据表设计:
- 自关联字段的外键指向自身, ForeignKey(‘self’)
- 使用 related_name 指明查询一个行政区划的所有下级行政区划时,使用哪种语法查询;
迁移数据库,导入数据
-
请求有两种方式:
'list','retrieve',list请求省份数据,retrieve根据上级 id 请求数据; -
让视图继承自
ReadOnlyModelViewSet,这个视图集继承自'mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet',会自动执行 list(多条数据)和 retrieve(单个数据)的查询; -
重写
get_queryset和get_serializer_class方法,进行判断,对应两种请求方式来写对应的 查询结果集 和 序列化器; -
list 的查询结果集和序列化器没什么难度,
-
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)
-
retrieve 的序列化器需要查询出子级信息 subs,进行返回;
-
城市信息和区划信息是同一个接口
使用缓存
省市区的数据是经常被用户查询使用的,而且数据基本不变化,所以我们可以将省市区数据进行缓存处理,减少数据库的查询次数。
在Django REST framework中使用缓存,可以通过drf-extensions扩展来实现。
因为省市区视图使用了视图集,并且视图集中有提供ListModelMixin和RetrieveModelMixin的扩展(由ReadOnlyModelViewSet提供),所以可以直接添加CacheResponseMixin扩展类,就相当于在 list 和 retrieve 方法添加了装饰器 @cache_response,就可以使用缓存了
在配置文件中设置将缓存数据保存在 redis 中,设置有效期
当数据库进行查询时,会将缓存保存在 redis 中,下一次请求时会优先访问缓存
用户地址管理:
创建用户地址模型类,
添加视图:用户地址列表数据,保存用户地址数据,处理删除(逻辑删除),设置默认地址,修改标题
添加对应序列化器
本文介绍地址管理系统的设计与实现,包括省市区三级联动、用户地址管理及缓存策略。通过自关联数据表和视图集,实现高效的数据查询与更新。利用缓存减少数据库负担,提升应用响应速度。
1990

被折叠的 条评论
为什么被折叠?



