솔루션에 의해 허용 된 비 아약스 사이트에 같은
이 사이트에 아약스 - 기능이있는 경우 훨씬 더 많은 요청이 필요하다는 것을 염두에 두어야/분 내가 마구
django-hitcount 응용 프로그램과 함께 와서 원래보기의 "래핑". 다행히도 필자는 제한하려고하는 뷰와 연결할 수있는 객체 (
Page
)를 가지고 있으므로 hitcount 응용 프로그램이 잘 작동합니다 (주로 의도 한대로).
내가 추적하고있는 뷰는 line_list
입니다. 새 뷰를 호출하여 line_list_monitor
을 랩하고 line_list
의 원래 URL을 연결했습니다. 새보기가 아래에 포함되어 있습니다. 문제의 IP가 한도 (한 주에 20 번 조회수)를 초과하면 overimit.html로 리디렉션됩니다. 그렇지 않으면 원래보기가 정상적으로 호출됩니다.
def line_list_monitor(request, character, pagenum):
LIMIT_HITS = 20
LIMIT_PERIOD = {'weeks': 1}
obj, created = Page.objects.get_or_create(character=character, page=pagenum)
obj_pk = obj.pk
ctype = ContentType.objects.get_for_model(obj)
hitcount, created = HitCount.objects.get_or_create(content_type=ctype,
object_pk=obj_pk)
hit = Hit(session="",
hitcount=hitcount,
ip=get_ip(request),
user_agent="")
hit.save()
period = datetime.datetime.utcnow() - datetime.timedelta(**LIMIT_PERIOD)
count = hitcount.hit_set.filter(ip=get_ip(request),
created__gte=period).count()
if count > LIMIT_HITS:
template = "overlimit.html"
return render_to_response(template, context_instance=RequestContext(request))
else:
return line_list(request, character, page)
하지만 계속 실행해야합니다. 지금 나는 이것이 IP에 의한 뷰 요청을 추적하는 새로운 모델을 필요로한다고 생각하고있다. 나는 이것을 피할 수 있다고 생각했다. – ariddell
그냥 질문에 대한 답변을했습니다. 모든 솔루션은 사용자를 추적하기 위해 IP 또는 사용자 별 모델을 만들어야합니다. 당신이 말하는 시스템의 종류는 대단히 강력하지 않으며, 프록시 나 유동 IP 할당을 통해 우회하기가 상대적으로 쉽습니다. 세션은 실제로 사용자가 취하는 모든 단일 작업 (예 : 사용자 및 사이트 운영자 모두에게 편리함)에 대해 사용자 ID 및 비밀번호를 표시 할 필요를 방지하기위한 것입니다. 사용자를 제한하기 위해 사용하려고하면 주위를 둘러 볼 수 있습니다. 또한 페이지로드가 실패하면 사용자를 속일 수 있습니다. –