To jest stara wersja strony!
W kontekście jednego projektu biznesowego Django dla jednej firmy, powszechnie stosowaną praktyką jest tworzenie jednego dużego projektu Django, który zawiera wiele aplikacji. Każda aplikacja reprezentuje różne funkcjonalności, moduły lub komponenty systemu. Dzięki temu podejściu, całość projektu biznesowego jest zorganizowana w ramach jednej struktury projektowej. Korzyści z tego podejścia obejmują:
1. Łatwość organizacji: Możesz zorganizować projekt według różnych modułów lub funkcjonalności, a każda aplikacja może reprezentować jedną z tych części.
2. Współdzielenie kodu: W ramach jednego projektu łatwiej jest współdzielić kod między różnymi aplikacjami. Dostęp do wspólnego kodu, takiego jak modele, funkcje pomocnicze czy widoki, jest bardziej zintegrowany.
3. Utrzymanie jednej bazy danych: Jednym projektem łatwiej zarządzać jedną bazą danych, zwłaszcza jeśli różne aplikacje mają ze sobą powiązane dane.
4. Integracja: Aplikacje w ramach jednego projektu mogą łatwiej współpracować i wymieniać dane. Komunikacja między aplikacjami jest bardziej bezpośrednia.
5. Łatwiejsze zarządzanie infrastrukturą: Zarządzanie jednym projektem może być prostsze niż wieloma projektami, zwłaszcza jeśli chodzi o kwestie infrastruktury, konfiguracji serwerów itp.
6. Wspólna autoryzacja i uwierzytelnianie: Wspólne mechanizmy autoryzacji i uwierzytelniania można zaimplementować na poziomie projektu, co ułatwia zarządzanie dostępem do różnych funkcji.
Jednakże, w przypadku bardziej rozległych projektów, w których różne części systemu są zupełnie niezależne i wymagają oddzielnych zasobów, niektóre firmy decydują się na stosowanie mikrousług (microservices). Każda mikrousługa jest wtedy oddzielnym projektem Django, co umożliwia niezależne rozwijanie, testowanie i wdrożenie poszczególnych części systemu. Ostateczna decyzja zależy od konkretnej sytuacji, struktury biznesowej, wymagań projektu oraz preferencji zespołu programistycznego. Warto przemyśleć, jakie podejście najlepiej odpowiada specyfice danego projektu.
W Django, domyślnie korzysta się z jednej wspólnej tabeli użytkowników (`auth_user`) dla całego projektu, niezależnie od tego, ile aplikacji jest w nim zawartych. Wspólna tabela użytkowników jest zazwyczaj przechowywana w bazie danych i obsługiwana przez mechanizm uwierzytelniania Django. Jednakże, w przypadku, gdy potrzebujesz dostosowanej logiki uwierzytelniania i chcesz, aby każda aplikacja miała swoje niezależne tabele użytkowników, możesz to zrealizować, implementując niestandardowy model użytkownika w każdej aplikacji. Przykładowo, w pliku models.py danej aplikacji możesz zdefiniować niestandardowy model użytkownika:
(`auth_user`)
models.py
from django.contrib.auth.models import AbstractUser from django.db import models class MyAppUser(AbstractUser): # dodatkowe pola dla niestandardowego modelu użytkownika custom_field = models.CharField(max_length=100)
Następnie, musisz skonfigurować Django, aby używał Twojego niestandardowego modelu użytkownika. W pliku settings.py projektu dodaj:
settings.py
AUTH_USER_MODEL = 'myapp.MyAppUser'
Gdzie 'myapp' to nazwa Twojej aplikacji, a 'MyAppUser' to nazwa niestandardowego modelu użytkownika. Ważne: Zmiana modelu użytkownika po utworzeniu bazy danych może być skomplikowana. Jeśli projekt jest już w zaawansowanym stadium, zmiana modelu użytkownika może wymagać manualnej modyfikacji bazy danych. Pamiętaj, że taka konfiguracja wprowadza własną logikę uwierzytelniania dla każdej aplikacji, co oznacza, że użytkownicy z jednej aplikacji nie będą automatycznie miały dostępu do zasobów związanych z użytkownikami z innej aplikacji. To również wprowadza dodatkową odpowiedzialność za zarządzanie niestandardowymi modelami użytkowników, w tym ich migracjami i ewentualnymi aktualizacjami.
'myapp
'MyAppUser
W Django, wybór metody obliczeń, czyli gdzie przetwarzać i przygotowywać dane, zależy od konkretnego kontekstu i specyfiki projektu. Django oferuje elastyczność w zakresie tego, gdzie i w jaki sposób przetwarzać dane. Poniżej przedstawiam kilka ogólnych zaleceń, ale ważne jest dostosowanie podejścia do wymagań i charakteru projektu.
1. Po stronie bazy danych:
F()
Q()
Count()
Sum()
Avg()
2. W widokach (views):
3. W szablonach (templates):
Ostateczny wybór zależy od specyfiki projektu, wymagań funkcjonalnych, efektywności oraz czytelności kodu. Czasami optymalne rozwiązanie może polegać na kombinacji różnych podejść, w zależności od konkretnego przypadku użycia. Warto również pamiętać o zasadzie thin views, fat models zachęcającej do umieszczania jak największej ilości logiki biznesowej w warstwie modelu.
thin views, fat models