Yang 코딩 공부

django 조회수 조작 방지하기 본문

Django/tip

django 조회수 조작 방지하기

코딩하는 Yang 2021. 11. 8. 15:42

쿠키를 사용한 조회수 조작 방지.

 

회수 조작 방지하기.

model_object = get_object_or_404(models.Model,pk=pk)

response = render(request, "ooo.html", context)

expire_date, now = datetime.datetime.now(), datetime.datetime.now()
expire_date += datetime.timedelta(days=1)
expire_date = expire_date.replace(hour=0, minute=0, second=0, microsecond=0)
expire_date -= now
max_age = expire_date.total_seconds()

cookie_value = request.COOKIES.get('hitnotice', '_')
if f'_{pk}_' not in cookie_value:
    cookie_value += f'{pk}_'
    response.set_cookie('hitnotice', value=cookie_value, max_age=max_age, httponly=True)
    model_object.update_views # 조회수를 증가시켜주는 함수
    model_object.save()

return response

 

 

 

render 함수는 HttpResponse객체를 리턴하는 메서드이다.

리턴됀 HttpResponse 객체를 response변수에 할당.

 

-> expire_date : 쿠키의 만료기간을 나타내는 변수. 익일 0시 0분 0초를 만료기간으로 하여 현재시간으로부터 얼마나 남았는지 계산함

-> max_age : 남은 시간(expire_date)을 초(second)로 환산하여 저장

->request.COOKIES.get('hitnotice', '_') request에서 'hitnotice'라는 이름의 쿠키값을 가져온다.

쿠기가 존재하지 않을 경우 기본값으로 '_'을 설정

-> if문

쿠키값에 해당 게시글의 번호가 없을 경우, 쿠키에 게시글의 번호를 추가하고 조회수를 +1 한다.

response 객체를 리턴

  • HttpResponse.set_cookie -> 쿠키가 없으면 생성, 있으면 수정하는 매서드
    • set_cookie(cookie_name, value, max_age, httponly)
    • cookie_name : 쿠키명을 입력
    • value : 쿠키의 값으로 문자열 타입을 입력
    • max_age: float타입의 데이터를 입력. 단위는 초(second)
    • httponly : JavaScript의 쿠키 접근 여부를 설정. True일 경우 JavaScript로 해당 쿠키에 접근할 수 없음.
  • 단점
    • 쿠키를 삭제하고 접속하면 조회수 조작 방지가 되지 않음.