django 시간단위 데이터 조회

파오리·2021년 2월 19일
0

아주 작은 기록

목록 보기
1/13

내가 하고 싶은 것: 시간 별로 로그인 성공한 사람들 수를 그래프에 나타내고자 함

시나리오

(1) db에서 해당 시간대에 접속한 사람들 (한시간 단위) 데이터를 불러오기
(2) 그 데이터들 중에서 result값이 Success인 사람들을 count하기
(3) 시간 별로 로그인 성공한 사람들의 count 값을 리스트로 만들어서 chart.js 코드의 data 옵션으로 넣어주기

관건: db의 DateTimeField에서 '시'부분만 같은 데이터들을 추출할 수 있나?

결과 1

# django views.py

# 종합 알림 그래프 - 그래프 데이터 (접근 명수 count)
for i in range(6):
	h = now - timedelta(hours=i)
    	hour_start = h.strftime("%Y-%m-%d %H:00:00")
        hour_end = h.strftime("%Y-%m-%d %H:59:59")
        hour_nac = Nac.objects.filter(time__range=[hour_start, hour_end])
        hour_nac_success = hour_nac.filter(result="Success").count()
        main_hour_nac.append(hour_nac_success)
main_hour_nac.reverse()

time 필드에 __range 붙여서 filter를 처리할 수 있다. (대박적)

결과 2

# django views.py 

# 종합 알림 그래프 - 그래프 데이터 (접근 명수 count)
for i in range(6):
	h = now - timedelta(hours=i)
    	hour_nac = Nac.objects.filter(time__year=h.year, time__month=h.month, time__day=h.day, time__hour=h.hour)
        hour_nac_success = hour_nac.filter(result="Success").count()
        main_hour_nac.append(hour_nac_success)
main_hour_nac.reverse()

time 필드의 __year, __month, __day, __hour 속성을 붙여서 filter 기능을 사용했다.

# js 파일
var nacTotalChart = new Chart(ctx, {
	type: 'line',
    	data: {
        	labels: h_labels.
            	datasets: [{
                	label:'로그인 성공',
                    	data: main_hour_nac,
                        ...

그 결과:

임의로 오늘 날짜 8시, 9시, 10시에 성공 데이터 하나씩과 11시에 성공데이터 2개, 실패 데이터 1개를 넣었다.

성공~!

profile
경험 == 배움

0개의 댓글