@@ -320,37 +320,14 @@ def get(self, request, countryShortCode, state, raw=None):
320320 return Response (serializer .data )
321321
322322
323- class StateDailyListView ( APIView ):
323+ class BaseDailyView ( object ):
324324
325- """州按天返回列表"""
326-
327- def get_object (self , countryShortCode , state ):
328- state = models .State .objects .filter (
329- countryShortCode = countryShortCode , state = state ).first ()
330- if state is None :
331- raise Http404
332- return state
333-
334- @method_decorator (cache_page (
335- CACHE_PAGE_TIMEOUT , key_prefix = 'state-daily-list' ))
336- def get (self , request , countryShortCode , state , raw = None ):
337- inst = self .get_object (countryShortCode , state )
338- result = inst .dailyData
339- result = json .loads (result )
340- if raw == 'raw' :
341- return Response (result )
342- data = []
343- for r in result :
344- data .append (self .format (inst , r ))
345- serializer = serializers .StateDailySerializer (data , many = True )
346- return Response (serializer .data )
347-
348- def format (self , inst , data ):
325+ def format (self , countryShortCode , stateName , data ):
349326 item = {}
350327 item ['date' ] = data ['date' ]
351328 item ['state' ] = data ['state' ]
352- item ['stateName' ] = inst . stateName
353- item ['countryShortCode' ] = inst . countryShortCode
329+ item ['stateName' ] = stateName
330+ item ['countryShortCode' ] = countryShortCode
354331
355332 item ['confirmedCount' ] = data .get ('positive' )
356333 item ['currentConfirmedCount' ] = self .get_current_confirmed (data )
@@ -376,7 +353,34 @@ def get_current_confirmed_incr(self, data):
376353 death = data ['deathIncrease' ] if data .get ('deathIncrease' ) else 0
377354 return positive - death
378355
379- class StateDailyListByNameView (StateDailyListView ):
356+
357+ class StateDailyListView (APIView , BaseDailyView ):
358+
359+ """州按天返回列表"""
360+
361+ def get_object (self , countryShortCode , state ):
362+ state = models .State .objects .filter (
363+ countryShortCode = countryShortCode , state = state ).first ()
364+ if state is None :
365+ raise Http404
366+ return state
367+
368+ @method_decorator (cache_page (
369+ CACHE_PAGE_TIMEOUT , key_prefix = 'state-daily-list' ))
370+ def get (self , request , countryShortCode , state , raw = None ):
371+ inst = self .get_object (countryShortCode , state )
372+ result = inst .dailyData
373+ result = json .loads (result )
374+ if raw == 'raw' :
375+ return Response (result )
376+ stateName = inst .stateName
377+ data = []
378+ for r in result :
379+ data .append (self .format (countryShortCode , stateName , r ))
380+ serializer = serializers .StateDailySerializer (data , many = True )
381+ return Response (serializer .data )
382+
383+ class StateDailyListByNameView (APIView , BaseDailyView ):
380384
381385 def get_object (self , countryShortCode , stateName ):
382386 state = models .State .objects .filter (
@@ -393,8 +397,54 @@ def get(self, request, countryShortCode, stateName, raw=None):
393397 result = json .loads (result )
394398 if raw == 'raw' :
395399 return Response (result )
400+ stateName = inst .stateName
396401 data = []
397402 for r in result :
398- data .append (self .format (inst , r ))
403+ data .append (self .format (countryShortCode , stateName , r ))
399404 serializer = serializers .StateDailySerializer (data , many = True )
400- return Response (serializer .data )
405+ return Response (serializer .data )
406+
407+
408+ class StateListDailyListView (ListAPIView , BaseDailyView ):
409+
410+ serializer_class = serializers .StateDailyListSerializer
411+ filter_class = filters .StateFilter
412+
413+ def get_queryset (self ):
414+ countryShortCode = self .kwargs ['countryShortCode' ]
415+ return models .State .objects .filter (
416+ countryShortCode = countryShortCode ).order_by ('state' )
417+
418+ def list (self , request , * args , ** kwargs ):
419+ countryShortCode = kwargs ['countryShortCode' ]
420+ queryset = self .filter_queryset (self .get_queryset ())
421+
422+ if kwargs .get ('raw' ) == 'raw' :
423+ self .serializer_class = serializers .StateRawSerializer
424+
425+ result = []
426+ page = self .paginate_queryset (queryset )
427+ if page is not None :
428+ serializer = self .get_serializer (page , many = True )
429+ for item in serializer .data :
430+ stateName = item ['stateName' ]
431+ dailyData = json .loads (item ['dailyData' ])
432+ for daily in dailyData :
433+ result .append (
434+ self .format (countryShortCode , stateName , daily ))
435+ return self .get_paginated_response (result )
436+
437+ serializer = self .get_serializer (queryset , many = True )
438+ for item in serializer .data :
439+ stateName = item ['stateName' ]
440+ dailyData = json .loads (item ['dailyData' ])
441+ for daily in dailyData :
442+ result .append (
443+ self .format (countryShortCode , stateName , daily ))
444+ return Response (result )
445+
446+ @method_decorator (cache_page (
447+ CACHE_PAGE_TIMEOUT , key_prefix = 'state-list-daily-list' ))
448+ def dispatch (self , * args , ** kwargs ):
449+ return super (StateListDailyListView , self ).dispatch (* args , ** kwargs )
450+
0 commit comments