3

404エラーをすべて収集し、モデルに保存すると便利だと思いました。

これらのエラーは、新しいWebプロジェクトを設計するためのURLの書き込み(または再書き込み)に役立つ可能性があります。また、あなたがそうするかもしれないように、自動的に入力する人http://www.domian.com/newsまたはhttp://www.domian.com/productsまたは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このクラスをsettings.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 に答える