day 6: 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
},
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.