day 6: django - rest - framework - - 데이터 직렬 화, 지속 화, 흐름 제한, 페이지 나 누 기

5231 단어
django-rest-framework
데이터 직렬 화 / 직렬 화: 대상 을 문자 나 바이트 로 처리 하 는 것 을 직렬 화 라 고 합 니 다. 예 를 들 어 데이터 모델 을 데이터베이스 에 비 추 는 것, 예 를 들 어 대상 모델 을 json 데이터 반 직렬 화 / 반 직렬 화: 문자 나 바이트 를 대상 으로 복원 하 는 것 을 반 직렬 화 라 고 합 니 다. 예 를 들 어 데이터 베 이 스 를 한 장의 표 의 한 줄 데 이 터 를 모델 대상 으로 복원 하 는 것 보다 json / pickle - json. dumps 입 니 다.(xxx) 는 xxx 문자열 화, pickle. dumps (xxx) 는 xxx 바이트 화 입 니 다.
1. 직렬 화 (중점, 세 가지 방법 으로 데 이 터 를 조회) - serializer 2, 데이터 영구 화 (데이터베이스 데이터 캐 시 에서 redis) - cache page 3, 흐름 제한 (파충류 방지) - settings. py - REST FRAMEORK 설정 정보 4, 데이터 페이지 - settings. py - REST FRAMEORK 설정 정보
1. 직렬 화 serializer
직렬 화 모델 대상 은 두 가지 상황 이 있 습 니 다. (1) FBV - function base view - 함수 기반 보기 (2) CBV - class base view - 클래스 기반 보기 (추천) FBV: 접근 경로 설정 정보:
urlpatterns = [
    path('get_province/',views.get_province),
]
def get_provinces(request):
    #parent__isnull=True——  parent       ;
    queryset = District.objects.filter(parent__isnull=True).only('name')
    #             ,many=True-          ;
    serializer = DistrictSerializer(queryset, many=True)
    #  json  ,safe=False-               ;
    return JsonResponse(serializer.data, safe=False)

#    
class DistrictSerializer(serializers.ModelSerializer):

    class Meta:
        #       
        model = District
        #             
        fields = ('distid', 'name')

CBV: 첫 번 째 접근 경로 설정 정보
urlpatterns = [
    path('estates/', EstateView.as_view()),
]
from rest_framework.generics import ListAPIView, RetrieveAPIView
#RetrieveAPIView-        ,ListAPIView-        
class EstateView(RetrieveAPIView,ListAPIView):
    queryset = TbEstate.objects.all().select_related('distid')
    serializer_class = EstateSerializer

#    
class EstateSerializer(serializers.ModelSerializer):
    #    ,                        。        “get_(fieldnamel)”  ,          ,           。
    district = serializers.SerializerMethodField()

    @staticmethod
    def get_district(self,estate):
        #   TbEstate     , estate。                  。
        return DistrictSerializer(estate.distid).data

    class Meta:
        model = TbEstate
        fields = ('estateid', 'name', 'district', 'hot', 'intro')

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 두 번 째 방문 경로 설정 정보
#    CBV               urlpatterns
urlpatterns = []
router = DefaultRouter()
router.register('housetypes', views.HouseTypeViewSet)  
urlpatterns += router.urls
from rest_framework_extensions.cache.mixins import CacheResponseMixin
#CacheResponseMixin--                
class HouseTypeViewSet(CacheResponseMixin,ModelViewSet):
    queryset = TbHouseType.objects.all()
    serializer_class = HouseTypeSerializer

#    
class HouseTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model =TbHouseType
        fields = "__all__"

2. 데이터 영구 화
자주 사용 되 는 데 이 터 를 데이터베이스 에서 조회 한 다음 redis 에 캐 시 하 는 것 은 사이트 조회 성능 을 향상 시 키 는 데 자주 사용 되 는 방법 입 니 다. 예 를 들 어 아래 FBV 형의 보기 함수 에 대한 데 이 터 를 조회 하고 @ cache page () 장식 기 를 더 하면 조회 수 를 해당 하 는 redis 캐 시 에 저장 할 수 있 습 니 다.
from django.views.decorators.cache import cache_page
#timeout-      (s);cache-       (       setting.py   );key_profix-     key  ,      key     ;
@cache_page(timeout=86400*365,cache='api',key_prefix='cities')
def get_city(request,pid):
    queryset=TbDistrict.objects.filter(pid=pid).only('distid','name')
    serializer=DistrictDetailSerializer(queryset,many=True)
    return JsonResponse(serializer.data,safe=False)

아래 CBV 형의 보기 함수 조회 데 이 터 를 redis 캐 시 에 추가 하려 면 프로젝트 settings. py 파일 설정 을 따로 해 야 합 니 다.
from rest_framework_extensions.cache.mixins import CacheResponseMixin
class HouseTypeViewSet(CacheResponseMixin,ModelViewSet):
    queryset = TbHouseType.objects.all()
    serializer_class = HouseTypeSerializer
#         HouseTypeViewSet        ,      CacheResponseMixin 
#   DRF       API      
REST_FRAMEWORK_EXTENSIONS = {
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 300,
    'DEFAULT_USE_CACHE': 'api',
    #            key  
    'DEFAULT_OBJECT_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_object_cache_key_func',
    #            key  
    'DEFAULT_LIST_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_list_cache_key_func',
}

3, 4 스 트림 제한, 데이터 페이지 항목 settings. py 파일 설정 상황
REST_FRAMEWORK = {
    #         (    )
    'PAGE_SIZE': 5,
    #        
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    #        (   )
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle', #          
        'rest_framework.throttling.UserRateThrottle'  #        
    ),
    'DEFAULT_THROTTLE_RATES': {
            'anon': '3/min',   #    ip     3 
            'user': '10000/day'  #    ip    10000 
    },
}

좋은 웹페이지 즐겨찾기