私は新しく、混乱しています。記事とブログモデルの両方の「トップヒット」インスタンスを追跡するモジュールを作成したいと思います。記事やブログモデルのコードには触れたくありません。これはミドルウェアの候補ですか?見てHttpRequest.path
?
2 に答える
request.pathを見るミドルウェアは、記事やブログ投稿の表示に使用するURLパターンの詳細に依存するため、見苦しいものです。この結合を気にしない場合は、パフォーマンスヒットを保存して、Webサーバーのログファイルで分析を行うこともできます。(編集:ビューミドルウェアは、呼び出し可能なビューとその引数を提供するため、より良いオプションです。無関係なビューにオーバーヘッドが発生しないため、デコレータアプローチを引き続き使用しますが、ビューミドルウェアは必要ない場合は機能しますブログ/記事アプリケーションのURLconfにタッチします)。
object_detailビュー(または同等のカスタムビュー)をラップするビューデコレータを使用します。このラッピングは、URLconfで直接行うことができます。このようなもの:
def count_hits(func):
def decorated(request, *args, **kwargs):
# ... find object and update hit count for it...
return func(request, *args, **kwargs)
return decorated
そして、views.pyでそれを適用することができます:
@count_hits
def detail_view(...
またはURLconfで:
url(r'^/blog/post...', count_hits(detail_view))
一般的なヒットモデルを作成できます
class Hit(models.Model):
date = models.DateTimeFiles(auto_now=True)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
view.pyで、次の関数を記述します。
def render_to_response_hit_count(request,template_path,keys,response):
for key in keys:
for i in response[key]:
Hit(content_object=i).save()
return render_to_response(template_path, response)
そしてあなたが見返りに興味を持っている見解
return render_to_response_hit_count(request, 'map/list.html',['list',],
{
'list': l,
})
このアプローチにより、ヒットをカウントするだけでなく、時間、コンテンツタイプなどでヒット履歴をフィルタリングすることができます...
ヒットテーブルは急速に成長している可能性があるため、削除戦略を検討する必要があります。