현제의 현재이야기

[OSOD] Timezone과 연속 학습 본문

DRF/OSOD

[OSOD] Timezone과 연속 학습

현재의 현제 2023. 2. 19. 10:25

이부분의 view이다.

class MypageUserDetailView(APIView):

    def get(self, request, *args, **kwargs):
        user = self.request.user
        posts = Post.objects.filter(user_id = user.id).order_by('-created_at')
        post_num = posts.count()
        today = datetime.now().date()
        today_study_bool = False
        continuous_cnt = 0
        prev_date = datetime.now().date()

        for post in posts:
            if post.created_at.date() == today:
                today_study_bool = True
            if post.created_at.date() == prev_date:
                continue
            if (prev_date - post.created_at.date()).days > 1:
                break
            continuous_cnt += 1
            prev_date = post.created_at.date()
        if today_study_bool:
            continuous_cnt += 1

        data = {
            "post_num" : post_num,
            "continuous_cnt": continuous_cnt,
            "liked_num": user.liked_num,
            "today_study_bool": today_study_bool
        }
        return Response(data)
  • 저 연속학습 알고리즘을 짜보았는데 잘 작동하였댜.
  • 만약 post 제일 처음의 날짜가 오늘이라면 today_study_bool(오늘 작문 했는가?) 를 True로 바꿔준다.
  • prev_date 때문에 중복된 날짜의 post가 오면 continue로 넘겨준다. 처음 prev_date가 오늘로 되어있기 때문에 today_study_bool을 True로 바꿔준 뒤, continue로 계속 넘어간다.
  • 만약 prev_date와 post의 날짜가 1일이상 차이나면 연속되어 학습한게 아니므로 break해준다.
  • 그리고 위 if문이 걸리지 않았다면 cnt+1를 해주고 prev_date를 갱신해준다.
  • 마지막으로 today_study_bool이 True라면 cnt+1을 해준다.

TImezone에 대하여

  • 자꾸 화나게 데이터베이스에 저장되는 created_at과 api에서 보여주는 created_at이 달라서 애먹었다.
  • stackoverflow에 검색해보니 USE_TZ를 False로 해야된단다.

settings.py

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_TZ = False
  • USE_TZ는 장고의 서버 전체를 지정한 TIME_ZONE으로 설정해주는 거란다.
  • 그래서 True로 해두었는데 알고보니 얘 때문에 데이터베이스에 저장되는 시간이 달랐던 것.
  • False로 하니깐 현재 서울 시간으로 잘 저장되었다.
 

Django model datetime is different in template than the database

The date data added is normally added to the database. There is a 3 hour difference in appearance. This is my saved data on admin panel: The view of that data on a template: Settings: LANGUAGE_CO...

stackoverflow.com

좋은 거 알아갑니다.

 

Comments