3

我认为收集所有 404 错误并将它们存储在模型中会很有用。

这些错误可以/应该在编写(或重写)用于设计新 Web 项目的 url 时有用。此外,正如您可能会做的那样,自动输入http://www.domian.com/newsorhttp://www.domian.com/products或 or的人http://www.domian.com/facebook

当人们错误地输入链接并且您可以为其开发重定向时,它也会很有用。

我只是不知道我将如何执行这样的事情。有任何想法吗?

感谢您的建议!

4

2 回答 2

4

最简单的方法是编写处理 404 的自定义中间件。请参阅有关中间件的 Django文档。

一个在 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

请记住,您需要将此类安装到您MIDDLEWARE_CLASSES的 insettings.py 中。

于 2013-01-03T23:25:37.490 回答
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 文档,就像之前的答案所推荐的那样。

于 2013-01-04T21:05:30.610 回答