내가 하고 싶은 것: 시간 별로 로그인 성공한 사람들 수를 그래프에 나타내고자 함
(1) db에서 해당 시간대에 접속한 사람들 (한시간 단위) 데이터를 불러오기
(2) 그 데이터들 중에서 result
값이 Success
인 사람들을 count하기
(3) 시간 별로 로그인 성공한 사람들의 count 값을 리스트로 만들어서 chart.js
코드의 data
옵션으로 넣어주기
관건: db의 DateTimeField
에서 '시'부분만 같은 데이터들을 추출할 수 있나?
# 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를 처리할 수 있다. (대박적)
# 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개를 넣었다.
성공~!