I'm working on my CMS and I want it to log activities by users and other admins. For example: when new user registers or admin makes a new news post -> update last activity.
Ben en iyi ve en kolay yolu nedir bilmek istiyorum.
Daha sonra adminler bu günlüğe faaliyetlerine erişim sağlayan bir raporlama aracı yazabilir, kullanıcı, zaman ve faaliyet türlerine göre filtreleme yapabilirsiniz.
Benim log-çerçevede, özellikle kötü niyetli eylemler olarak görülebilir faaliyetleri işaretlemek ve onlara farklı sayısal tehdit değerlerini atamak. Bir kullanıcının iplik değerinin toplamı belirli bir eşiğe ulaşırsa ben log-out kullanıcı.
Eğer bir uygulama yazarsanız İdeali, başında yapıp daha sonra tüm iş mantığı kodu kullanmak gibi altyapı kod yazmak.
Bunun yerine sıfırdan, bu kendinizi yapmanın, bazı mevcut sistemler bunu nasıl kontrol ve lisans izin veriyorsa, (emin kullanmış oldum ne kodu belge yapmak ve yere CMS için bir telif hakkı bildirimi eklemek) kendi tasarım ve kod kullanabilirsiniz .
PHP CMS Bunu hangi konuda emin değilim, ama Django's yönetici uygulaması biliyorum. Django Python uygulanan, ancak PHP üzerinde bu kod noktasına oldukça anlaşılır olmalıdır. Kod düz bir bağlantı olmasa bile, tasarım taşıdık olabilir.
Günlük içeren dosya models.py in admin
modülünde.
Bazı temel yönleri:
Günlük tablosu için veri modeli:
class LogEntry(models.Model):
action_time = models.DateTimeField(_('action time'), auto_now=True)
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType, blank=True, null=True)
object_id = models.TextField(_('object id'), blank=True, null=True)
object_repr = models.CharField(_('object repr'), max_length=200)
action_flag = models.PositiveSmallIntegerField(_('action flag'))
change_message = models.TextField(_('change message'), blank=True)
objects = LogEntryManager()
Asıl günlük girişlerini kaydeder ve LogEntryManager:
class LogEntryManager(models.Manager):
def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message)
e.save()
Kızgın, iyi şanslar!
Ben faaliyetleri için iki tablo, her faaliyeti bir id verir birini ve sadece kullanıcı kimliği, faaliyet id, ve bir zaman damgası kaydeder başka birini kullanın. Int bir dize daha az yer kaplıyor, neden tekrar aynı dizeleri oturum çünkü ben bunu? İkincisi, sadece gibi kolayca kendi referans için bir metin dosyasına eylem kodlarını tutmak, gerçekten gerekli değil, ama db sadece hatırlamak için kolay bir yer gibi görünüyor.
Geçmişte ben gerçek günlük eylemleri işlemek için bir fonksiyon kullanılır, ama ben bunu bir dahaki sefere ben Observer desen kullanarak gidiyorum. Bu çok daha esnek gibi görünüyor, ve ben zaten böyle bir şey oturum gidiş değildi sahip eski kod adlı günlük işlev çağrıları dışarı düzenlemek zorunda kalmıştım. Ben hemen hiçbir düzenleme gerekli olan kodu yeniden tercih ederim.