【问题标题】:Save 404 Error's URL in Django in models在模型中的 Django 中保存 404 错误的 URL
【发布时间】:2012-12-18 09:22:39
【问题描述】:

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

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

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

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

感谢您的建议!

【问题讨论】:

    标签: django django-models http-status-code-404


    【解决方案1】:

    最简单的方法是编写处理 404 的自定义中间件。请参阅 Django 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

    【讨论】:

    • 看起来很简单。感谢您的回复。
    • 太棒了!非常感谢Thane
    【解决方案2】:

    感谢之前的回答,我做到了:

    #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,就像之前一个答案所推荐的那样。

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 2012-02-04
      • 2011-04-17
      • 2023-03-23
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      相关资源
      最近更新 更多