- 實現視圖
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、返回行政區地址(三級聯動實現)並使用緩存)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.