2013-02-21 22 views
8

Szukam przechowywać aktywność użytkownika, ale nie jestem pewien, gdzie go przechowywać. Nie sądzę, że baza danych jest opcją, ponieważ będzie bardzo duża. Szukam wiedzieć, w jaki sposób witryny takie jak Facebook, Dropbox zapamiętać całą aktywność danego użytkownika. I nie można go przechowywać w sesjach, ponieważ nie jest to sesja specyficzna dla użytkownika.Przechowywanie działań użytkownika w Django

Proszę, pomóżcie mi z twoją sugestią.

Odpowiedz

6

Zwykle do takiej aktywności można użyć Django Admin Logs, jeśli chcesz.

Zwykle Django śledzi czynności administracyjne, takie jak tworzenie, aktualizowanie lub usuwanie istniejących rekordów. Ma następującą strukturę:

from django.contrib.admin.models import LogEntry 

LogEntry.objects.log_action(
          user_id = ..., 
          content_type_id = ..., 
          object_id = ..., 
          object_repr = ...., 
          change_message = ..., 
          action_flag = ... 
          ) 

używam, że w moim systemie jako rejestrator i śledzeniem każdym działaniu. Zwykle dzienniki Django wstawiają, aktualizują lub usuwają operacje wykonywane za pośrednictwem formularzy administracyjnych, a ja zapisuję ręcznie zapisane działania widoku i formularza. Ponadto można przechwytywać operacje użytkownika, takie jak logowanie/wylogowanie za pomocą signals.

Zdefiniowałem nowe flagi akcji. Django używa 3 flag: 1 dla insert, 2 dla update i 3 dla delete. Rozszerzyłem tę listę o moje flagi akcji.

Zaletą korzystania z tej funkcji jest, jak już powiedziałem, nie trzeba zajmować się domyślnymi formularzami administracyjnymi Django i działaniami wykonanymi przy użyciu tych formularzy.

6

Możesz chcieć spojrzeć na django-activity-stream, która jest implementacją activity streams spec. To przechowuje listę działań w bazie danych i pozwala następującym użytkownikom/podmiotom podać coś podobnego do Facebooka, jeśli jest to tym, czym jesteś zainteresowany.

Jednak, jak wspomniałeś, może to skończyć się ogromnymi zestawami dane, które mogą być trochę za tradycyjne podejście do pojedynczej bazy danych. Nie mam pewności, jak radzą sobie z tego witryny takie jak Twitter, ale jeśli nie planujesz bardzo szybkiego skalowania, standardowe podejście do bazy danych prawdopodobnie potrwa jakiś czas.

Powiązane problemy