My Image

Django 포스팅

[Django] 쿠키를 이용해서 조회수 기능 만들기

Doyeon0430 | 2023년 05월 22일

Django 이미지

이번시간에는 Django에서 제공하는 request.Cookies를 사용하겠습니다.

쿠키를 이용해서 처음 접속하는 사용자에 조회수가 올라가도록 설정하겠습니다.

쿨타임은 하루로 설정하고 하루에 한번만 조회수가 올라가도록 만들겁니다.

 

  1. Django 조회수 기능 - request.Cookies 사용법

  2. Django 조회수 기능 - request.Cookies 코드 분석

  3. Django 조회수 기능 - request.Cookies 결과화면

 

 

1. Django 조회수 기능 - request.Cookies 사용법

조회수를 저장하기 위해서는 데이터베이스에 새로운 모델을 추가해야합니다.

추가한 필드에 값을 넣어보겠습니다.

 

1. models.py

class Views(models.Model):
    views = models.PositiveIntegerField(default=0)

    def __str__(self):
        return str(self.views)

입력받은 값을 저장하기 위한 Int 필드를 하나 생성해주세요.

 

2. view.py

def main(request):  
    main_view = Views.objects.get(pk=3)

    cookie_name = f'main_'
    if cookie_name not in request.COOKIES:
        main_view.views += 1
        main_view.save()

        expires = datetime.utcnow() + timedelta(days=1)
        expires = expires.strftime('%a, %d-%b-%Y %H:%M:%S GMT')

        response = HttpResponse(render(request, 'myprofile/main.html', {'main_view': main_view}))
        response.set_cookie(cookie_name, 'true', expires=expires)
        return response

    return render(request,'myprofile/main.html', {'main_view': main_view})

if문을 이용해서 사용자에 쿠키가 없을 경우 조건을 참으로 만듭니다.

 

 

2. Django 조회수 기능 - request.Cookies 코드 분석

1. views.py 코드 분석

main_view = Views.objects.get(pk=3)

생성한 모델에서 id를 가져오도록 변수를 선언합니다.

저는 테스트를 하고자 id가 3인 데이터베이스를 사용했습니다.

 

2. views.py 코드 분석

cookie_name = f'main_'

다음으로 쿠키에 저장 될 이름을 지정해줍니다.

주로 _을 입력합니다.

 

3. views.py 코드 분석

if cookie_name not in request.COOKIES:
        main_view.views += 1
        main_view.save()

        expires = datetime.utcnow() + timedelta(days=1)
        expires = expires.strftime('%a, %d-%b-%Y %H:%M:%S GMT')

        response = HttpResponse(render(request, 'myprofile/main.html', {'main_view': main_view}))
        response.set_cookie(cookie_name, 'true', expires=expires)
        return response

if문으로 사용자가 쿠키에 등록이 안되어있다면 코드를 실행하게 만들었습니다.

아까 만든 models.py에서 Int필드에 가져와 값을 올립니다. 

그리고 expires을 통해 쿨타임을 하루로 지정합니다.

utcnow()는 utc 시간이고, strftime()는 utc 시간을 문자열로 변환시킵니다.

HttpResponse로 http 응답 객체를 생성합니다.

 

4. views.py 코드 분석

response.set_cookie(cookie_name, 'true', expires=expires)

cookie_name은 쿠키 이름을 설정합니다.

true는 쿠키 값을 설정합니다.

expires=expires는 쿠키 만료 시간을 설정합니다.

그 후 응답 객체를 내보내서 브라우저에 쿠키가 적용됩니다.

 

 

3. Django 조회수 기능 - request.Cookies 결과화면

1. 웹 페이지 접속 전

디장고 이미지

 

2. 웹 페이지 접속 후

디장고 이미지

 

글을 마치며 url에 접속하면 main 이름으로 쿠키가 등록되고 데이터베이스 값이 올라가도록 만들었습니다.

댓글 (0)

    댓글이 없습니다.

간편 댓글 작성

My Image My Image My Image My Image