本文阅读时长大约为 4 分钟
地址管理
实现用户地址的管理,主要业务逻辑:
省市区地址的数据库的建立与查询
用户地址的增删改查处理
设置默认地址
设置地址标题
在用户录入地址时,需要进行省市区的选择。在页面加载时,向后端请求省份数据,当用户选择确定省份后,向后端请求该省份的城市数据;在用户选择确定城市数据后,向后端请求该城市的区县信息。这个过程称为省市区三级联动。
省市区地址的三级联动:
创建省市区的数据表,采用自关联的方式;
数据表设计:
自关联字段的外键指向自身, ForeignKey(‘self’)
使用 related_name 指明查询一个行政区划的所有下级行政区划时,使用哪种语法查询;
迁移数据库,导入数据:
请求有两种方式:,,请求省份数据,根据上级 id 请求数据;
让视图继承自,这个视图集继承自会自动执行 list(多条数据)和 retrieve(单个数据)的查询;
重写和方法,进行判断,对应两种请求方式来写对应的 查询结果集 和 序列化器;
list 的查询结果集和序列化器没什么难度,
retrieve 的查询结果集在底层会自动以 id 为过滤条件来进行重新查询,
retrieve 的序列化器需要查询出子级信息 subs,进行返回;
城市信息和区划信息是同一个接口
使用缓存
省市区的数据是经常被用户查询使用的,而且数据基本不变化,所以我们可以将省市区数据进行缓存处理,减少数据库的查询次数。
在Django REST framework中使用缓存,可以通过drf-extensions扩展来实现。
因为省市区视图使用了视图集,并且视图集中有提供ListModelMixin和RetrieveModelMixin的扩展(由ReadOnlyModelViewSet提供),所以可以直接添加CacheResponseMixin扩展类,就相当于在 list 和 retrieve 方法添加了装饰器 @cache_response,就可以使用缓存了
在配置文件中设置将缓存数据保存在 redis 中,设置有效期
当数据库进行查询时,会将缓存保存在 redis 中,下一次请求时会优先访问缓存
用户地址管理:
创建用户地址模型类,
添加视图:用户地址列表数据,保存用户地址数据,处理删除(逻辑删除),设置默认地址,修改标题
添加对应序列化器
END
领取专属 10元无门槛券
私享最新 技术干货