Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 포맷팅
- 자료구조
- render html
- queryset filter
- CleanCode
- HTTP
- 클린 코드
- 트리란
- Djnago CSRF
- 효울적
- 클린코드
- check ajax
- reCAPTCHA V2
- Django Ajax
- 선택 정렬
- django 시작하기
- nginx
- django
- Proxy_pass
- queryset
- request.path
- Trre heap
- 버블 정렬
- 알고리즘
- 글자 수
- request.GET
- is_ajax() not working
- 정렬
- 클린코드-함수
- 복수 외래키
Archives
- Today
- Total
Yang 코딩 공부
django 조회수 조작 방지하기 본문
쿠키를 사용한 조회수 조작 방지.
조회수 조작 방지하기.
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로 해당 쿠키에 접근할 수 없음.
- 단점
- 쿠키를 삭제하고 접속하면 조회수 조작 방지가 되지 않음.
'Django > tip' 카테고리의 다른 글
Django [Tip] - request.GET[key] / request.GET.get(key) 차이점 (0) | 2022.03.31 |
---|---|
Django [Tip] - Django Template Tag 이용 글자 수 출력 길이 지정 (0) | 2022.03.29 |
Django에서 ajax 사용할 때 CSRF token missing (0) | 2021.11.08 |
django 쿼리셋 합치기 (0) | 2021.10.28 |
Django - reCAPTCHA V2 적용하기 (0) | 2021.10.01 |