- 实现视图
from rest_framework.viewsets import ReadOnlyModelViewSet from . import serializers # Create your views here. from .models import Area class AreasViewset(ReadOnlyModelViewSet): """ 内部实现两种方法发返回单一数据和列表数据, 当返回单一数据时返回省信息, 返回单一数据是返回单一数据并返回它的下一级数据 """ # queryset = Area.objects.all() # serializer_class = serializers.AreaSerializer # 禁止分页 pagination_class = None def get_queryset(self): """ 根据不同业务返回不同查询集 :return: 查询集 """ if self.action == 'list': # 如果是list返回一级数据 return Area.objects.fiter(parent=None) else: return Area.objects.all() def get_serializer_class(self): """ 根据不同业务使用不同序列化器 :return: 序列化器 """ if self.action == 'list': return serializers.AreaSerializer else: return serializers.SubAreaSerializer
- 实现序列化器
from rest_framework import serializers from .models import Area class AreaSerializer(serializers.ModelSerializer): """省序列化器""" class Meta: model = Area fields = ['id', 'name'] class SubAreaSerializer(serializers.ModelSerializer): """城市和区县序列化器""" # 使用subs关联AreaSerializer # area_set = AreaSerializer(many=True, read_only=True) # 返回省的时候将下一级数据一并返回 subs = AreaSerializer(many=True, read_only=True) class Meta: model = Area fields = ['id', 'name', 'subs']
- 添加路由
from rest_framework.routers import DefaultRouter from . import views router = DefaultRouter() router.register(r'areas', views.AreasViewset, base_name='areas') urlpatterns = [] urlpatterns += router.urls
- 使用缓存
- 导入模块
pip install drf-extensions
- 在视图集添加CacheResponseMixin即可
from rest_framework_extensions.cache.mixins import CacheResponseMixin class AreasViewset(CacheResponseMixin, ReadOnlyModelViewSet): pass
-
我们想把缓存数据保存在redis中,且设置有效期,可以通过在配置文件中定义的方式来实现。
在配置文件中增加
# DRF扩展 REST_FRAMEWORK_EXTENSIONS = { # 缓存时间 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60, # 缓存存储 'DEFAULT_USE_CACHE': 'default', }
- 3
- 导入模块
做一个Django项目(2.2、返回行政区地址(三级联动实现)并使用缓存)
最新推荐文章于 2024-07-11 09:20:43 发布