DJANGO - حساب المشاهدات مثيل نموذج النموذج (للحصول على تطبيق "كبار إدخالات")

StackOverflow https://stackoverflow.com/questions/888905

سؤال

أنا جديد، وأربب. أريد إنشاء وحدة نمطية تبقي مثيلات "أعلى الضرب" لكل من مقالة ونموذج مدونة. لا أريد أن ألمس التعليمات البرمجية لنماذج المقالة أو المدونة. هل هذا مرشح للطبيب؟ أنظر إلى HttpRequest.path?

هل كانت مفيدة؟

المحلول

البرامج الوسطى تبحث في الطلب. القبيح قبيحة، حيث تقدم اعتمادا على تفاصيل أنماط URL التي تستخدمها لعرض المقالات ووظائف المدونة. إذا كنت لا تمانع في هذا الاقتران، فيمكنك أيضا حفظ الأداء أيضا وقم بإجراء تحليلك على ملفات سجل WebServer. فيتعديل: عرض الوسيطة سيكون خيارا أفضل، حيث يمنحك طريقة العرض Callable و Args. ما زلت أفضل نهج Decorator لأنه لا يكثي النفقات العامة على طرق عرض غير ذات صلة، لكن عرض الوسائط ستعمل إذا كنت لا ترغب في لمس URLConf لتطبيقات المدونة / المقالة).

كنت أستخدم Decorator منظر تفتلك حول عرض 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

ويمكنك تطبيقه في وجهات النظر الاجتماعية

@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')

في عرض الخاص بك. هل تكتب هذه الوظيفة:

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,
        })

يمنحك هذا النهج الطاقة، ليس فقط لحساب الضربة، ولكن لتصفية تاريخ التضارب حسب الوقت، ContentType وهلم جرا ...

نظرا لأن مائدة التضمين قد ينمو بسرعة، فيجب عليك التفكير في استراتيجية الحذف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top