Pracuję w sklepie internetowym w Django (teraz tylko podstawowym koszyku) i planuję dodać funkcjonalność dla użytkowników, aby oznaczyć przedmioty jako ulubione (tak jak w stackoverflow). Modele do koszyka wyglądają mniej więcej tak:Dawanie anonimowym użytkownikom tej samej funkcjonalności co zarejestrowane
class Cart(models.Model):
user = models.OneToOneField(User)
class CartItem(models.Model):
cart = models.ForeignKey(Cart)
product = models.ForeignKey(Product, verbose_name="produs")
Model ulubionych to tylko tabela z dwoma wierszami: użytkownik i produkt.
Problem polega na tym, że działa to tylko dla zarejestrowanych użytkowników, ponieważ potrzebuję obiektu użytkownika. Jak mogę również pozwolić niezarejestrowanym użytkownikom korzystać z tych funkcji, zapisując dane w plikach cookie/sesjach oraz kiedy i czy zdecydują się zarejestrować, przenosząc dane do swojego użytkownika?
Domyślam się, że jedna opcja byłaby rodzajem ogólnych relacji, ale myślę, że to trochę skomplikowane. Może mając dodatkowy wiersz po użytkownik to obiekt sesji (tak naprawdę nie używałem sesji w django), a jeśli użytkownik jest ustawiony na Brak, użyj tego?
Zasadniczo chciałbym zapytać, czy wcześniej miałeś ten problem, jak go rozwiązałeś, jakie byłoby najlepsze podejście?
+1: anonimowi użytkownicy nadal mają adresy IP, za pomocą których można utworzyć niezbędny identyfikator użytkownika bez hasła. Gdy się zarejestrują, aktualizujesz je tak, aby uzyskać właściwą nazwę i hasło. –
Niezły pomysł, nie myślałem o tym. dzięki! –
Adres IP nie może być użyty jako klucz unikalny. Myśl o wielu użytkownikach za zaporą NAT. – tzot