2013-01-03 2 views
3

모든 404 오류를 수집하여 모델에 저장하는 것이 유용 할 것이라고 생각했습니다.모델의 Django에 404 오류의 URL을 저장하십시오.

이러한 오류는 새 웹 프로젝트를 디자인 할 때 URL을 쓰거나 쓸 때 유용 할 수 있습니다. 당신이 할 수있는대로 또한, 사람들은 누구 자동으로 사람들이 잘못 링크를 입력 할 때 또한 유용 할 것이다 http://www.domian.com/news 또는 http://www.domian.com/products 또는 http://www.domian.com/facebook

에 입력하고 당신이 그것을 위해 리디렉션을 개발할 수 있습니다.

나는 어떻게 이런 식으로 실행할지 모르겠다. 어떤 아이디어?

의견을 보내 주셔서 감사합니다.

답변

4

가장 쉬운 방법은 404를 처리하는 사용자 정의 미들웨어를 작성하는 것입니다. 장고 documentation on middleware을 참조하십시오. 404 트리거

아주 간단한 예 미들웨어 클래스 :

from django.http import HttpResponseNotFound 

class Catch404Middleware(object): 
    def process_response(self, request, response): 
     if isinstance(response, HttpResponseNotFound): 
      print "That was a 404!" 
     return response 

는 settings.py에 MIDDLEWARE_CLASSES에이 클래스를 설치해야합니다 기억하십시오. 이전 대답

+0

충분히 쉽게 보입니다. 응답 해 주셔서 감사합니다. – jmitchel3

+0

놀라운! 고마워요. Thane – jmitchel3

1

덕분에, 나는 이것을했습니다 :

#middleware.py (Under the Analytics App) 


from django.http import HttpResponseNotFound, HttpRequest 
from analytics.models import Site_Error 

class Catch404Middleware(object): 
    def process_response(self, request, response): 
     if isinstance(response, HttpResponseNotFound): 
     try: 
      new_save,created = Site_Error.objects.get_or_create(error=request.path) 
      new_save.times += 1 
      new_save.save() 
     except: 
      new_save = False 
    return response 

#models.py (Ananlytics App) 

class Site_Error(models.Model): 
    error = models.CharField(max_length=8000) 
    times = models.IntegerField(default=0) 
    timestamp = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     ordering = ('-timestamp',) 
     verbose_name = "Error" 
     verbose_name_plural = "Errors" 

    def __unicode__(self): 
     return self.error 


#in settings.py 
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 
'analytics.middleware.Catch404Middleware', 
) 

이 코드는 Site_Error 모델로 요청 된 모든 경로를 저장합니다. 당신이 이것으로 할 수있는 일이 훨씬 더 많아서 전에 대답으로 추천 한대로 Django documentation on middleware을 찾으십시오.

관련 문제