W mojej aplikacji mam studentów, profesorów i pracowników. Członkowie personelu nie potrzebują profilu, ale profesorowie i studenci muszą mieć inny profil. Wolałbym nie zaimplementować go samodzielnie (middleware i inne), więc czy jest tak, aby uzyskać get_profile() zwrócić inny profil w zależności od roli użytkownika?Jaki jest najlepszy sposób, aby mieć różne profile dla różnych rodzajów użytkowników w django?
Odpowiedz
Z Django 1.1, który jest obecnie w wersji beta, zaimplementowałbym proxy model.
class MyUser(User):
class Meta:
proxy = True
def get_profile(self):
if self.role == 'professor':
return ProfessorProfile._default_manager.get(user_id__exakt=self.id)
elif self.role == 'student':
return StudentProfile._default_manager.get(user_id__exakt=self.id)
else:
# staff
return None
get_profile potrzebuje kodu pamięci podręcznej z oryginału i tak dalej. Ale w zasadzie możesz zrobić coś takiego.
W Django 1.0.x można implementować klasy pochodne na podstawie użytkownika, ale może to spowodować złamanie kodu w innych miejscach. Do takich rzeczy uwielbiam klasy proxy, które po prostu dodają funkcje Pythona bez zmiany modeli baz danych.
Czy masz rad http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles?
To standardowe rozwiązanie.
Przeczytałem to. Potrzebuję różnych rodzajów profili dla różnych rodzajów użytkowników, to rozwiązanie zapewni tylko jeden rodzaj profilu dla wszystkich użytkowników. –
Zaktualizuj swoje pytanie na przykładzie "różnych rodzajów profili". Zazwyczaj definiujemy profile z wieloma polami, z których niektóre są opcjonalne. O czym mówisz? –
- 1. Django - Profile użytkowników różnych typów
- 2. różne profile użytkowników z Django profile i django rejestracji
- 3. Jaki jest najlepszy sposób rejestrowania aktywności użytkowników?
- 4. Różne limity czasu sesji dla różnych użytkowników
- 5. Django - Multiple User Profile
- 6. Dla zbioru danych SAS, jaki jest najlepszy sposób, aby zapobiec blokowaniu dla wielu użytkowników dostępu
- 7. Jaki jest najlepszy sposób przechowywania/obliczania wyników użytkowników?
- 8. Jaki jest najlepszy sposób oddzielenia różnych logik programowania dla różnych układów w systemie Android?
- 9. Jaki jest najlepszy sposób na integrację użytkowników ExpressionEngine z MailChimp?
- 10. Jaki jest najlepszy sposób na duplikowanie danych w szablonie django?
- 11. jaki jest najlepszy sposób generowania fałszywych danych dla problemu klasyfikacji?
- 12. Jaki jest najlepszy sposób przechowywania danych obszaru dla przygody tekstowej?
- 13. Jaki jest najlepszy sposób, aby logować użytkownika programowo w ExpressionEngine
- 14. Jaki jest najlepszy sposób w ES6, aby przypisać stałą warunkowo?
- 15. Jaki jest najlepszy sposób na usunięcie tła wideo html5 dla użytkowników mobilnych?
- 16. Jak mieć 2 różne strony administracyjne w projekcie Django?
- 17. Django - Wyświetlanie różnych szablonów dla administratorów
- 18. Najlepszy sposób, aby system "użytkownika" Django miał "przyjaciół"
- 19. Jaki jest najlepszy sposób na naukę Erlanga?
- 20. Jaki jest najlepszy sposób uruchomienia projektu django na aws?
- 21. Jaki jest najlepszy sposób wykonywania jQuery .change()
- 22. Najlepszy sposób uwierzytelniania użytkowników w aplikacji internetowej
- 23. Jaki jest najlepszy sposób tworzenia wdrożeń ClickOnce
- 24. Jaki jest najlepszy sposób testowania usług WCF?
- 25. Różne ustawienia dla różnych urządzeń?
- 26. Jaki jest najlepszy sposób odczytu GetResponseStream()?
- 27. Jaki jest najlepszy sposób obsługi programu GoBack dla różnych platform MvvmCross (v3)?
- 28. Jaki jest najlepszy sposób, aby zinterpretować lokalizację użytkownika obok geocoder
- 29. Jak mieć różne środowiska kompilacji dla Androida?
- 30. Jaki jest najlepszy sposób wdrożenia interfejsu API REST rejestracji dla iPhone'a/Androida?
Te wyglądają na przydatne, ale nadal stanowi to dokładnie ten sam problem, jaki mam z moim własnym wykorzystaniem wielu typów użytkowników/profili: istniejące aplikacje nie wiedzą o tym. Po prostu tworzą instancje użytkowników, więc ta metoda jest całkowicie ignorowana. – ironfroggy
Tak, wiele modeli użytkowników nadal stanowi problem, ale można rozwiązać różne profile na podstawie ról. –