Jako punkt wyjścia przedstawiam Django w formie klasycznej. Klasycznej oznacza bez klasycznej izolacji frontend-backend. Lecz z wykorzystaniem templates w django. Ma to swoje zastosowania. Zwłaszcza, jak ktoś nie myśli o rozbudowie na inne platformy, czy mobilne
  • Python 66%
  • HTML 34%
Find a file
2026-04-13 07:46:31 +02:00
config proste zastosowanie_pierwsze wrzucenie 2026-04-13 07:46:31 +02:00
news proste zastosowanie_pierwsze wrzucenie 2026-04-13 07:46:31 +02:00
db.sqlite3 proste zastosowanie_pierwsze wrzucenie 2026-04-13 07:46:31 +02:00
manage.py proste zastosowanie_pierwsze wrzucenie 2026-04-13 07:46:31 +02:00
README.md proste zastosowanie_pierwsze wrzucenie 2026-04-13 07:46:31 +02:00

Klasyczny przykład aplikacji Django - Aktualności (News)

Projekt przedstawia klasyczną architekturę i zastosowanie frameworka Django. Składa się z warstwy backendowej, zintegrowanego modelu bazy danych (SQLite) oraz warstwy prezentacji opartej na szablonach Django (Django Templates). Myślę, ze całkiem fajny punkt wyjścia do nauki spraw związanych z backendem

Funkcjonalności

  • Wyświetlanie listy najnowszych aktualności na stronie głównej.
  • Podgląd szczegółów wybranej wiadomości.
  • Dynamiczne zarządzanie treścią (CMS) z poziomu wbudowanego Panelu Administratora (dodawanie, edycja, ukrywanie oraz usuwanie aktualności).
  • Ochrona przed ukazywaniem treści oznaczonych jako nieaktywne (is_active=False).
  • Wbudowany system szablonów bazujący na mechanizmie dziedziczenia (base.html).

Struktura Projektu i Dobre Praktyki

W projekcie zastosowano bardziej transparentną strukturę katalogów (często pomijaną przez automatyczne generatory w środowiskach IDE, takich jak PyCharm).

Podział na Projekt (config) i Aplikację (news)

Zamiast tworzyć folder konfiguracyjny o takiej samej nazwie jak główny folder projektu (co prowadzi do zjawiska tzw. double-nested folders), zastosowano wyraźny podział na role:

  • Katalog config: Pełni rolę centrum sterowania dla całego systemu. Zawiera wyłącznie globalne ustawienia (settings.py), główny routing adresów URL (urls.py) oraz konfigurację serwera (WSGI/ASGI). Nie ma tutaj żadnej logiki biznesowej.
  • Katalog news: Jest to tzw. Aplikacja Django. Zgodnie z filozofią frameworka, Django jest zbudowane modułowo jeden system składa się z wielu, niezależnych aplikacji. news odpowiada wyłącznie za domenę aktualności (modele, widoki, szablony). Gdyby projekt miał zostać rozbudowany o galerię zdjęć, utworzylibyśmy nową aplikację obok katalogu news, a wszystko wciąż łączyłby jeden nadrzędny config. Jak się albo powraca do projektu po dłuzszym czasie albo po kimś robi, to nazywanie tak samo głównego folderu projektu i folderu projektu/konfiguracji - to zawsze miesza

Rola pliku apps.py

Wewnątrz aplikacji news znajduje się automatycznie wygenerowany plik apps.py. W nowoczesnym ekosystemie Django plik ten służy do "przedstawienia się" aplikacji głównemu projektowi. W nowszych wersjach jest to mile widziane. Zwłaszcza, ze później bywa łatwiej. Zamiast dodawać aplikację do INSTALLED_APPS (w settings.py) jako zwykły string 'news', dobrą praktyką jest wskazanie klasy konfiguracyjnej (np. 'news.apps.NewsConfig'). Pozwala to na:

  • Nadawanie aplikacji przyjaznych nazw (np. verbose_name = "Zarządzanie Aktualnościami"), które potem ładnie wyświetlają się w Panelu Administratora.
  • Uruchamianie kodu w momencie startu aplikacji (w metodzie ready()), co jest niezbędne np. do rejestrowania sygnałów (Signals) w Django.

Architektura i zastosowane rozwiązania

  1. Wzorzec MVT (Model-View-Template)

    • Model (news/models.py): Reprezentuje tabelę News w bazie danych, zawierając pola na tytuł, treść, status (aktywna/nieaktywna) oraz znaczniki czasowe.
    • Widok (news/views.py): Wykorzystuje klasowe widoki generyczne Django (Class-Based Views). ListView służy do prezentacji wszystkich aktualności (z sortowaniem malejącym), a DetailView do wyświetlenia pojedynczego wpisu.
    • Szablony (news/templates/): Warstwa wizualna. Korzysta z dziedziczenia z szablonu base.html, co redukuje duplikację kodu HTML (DRY - Don't Repeat Yourself).
  2. Panel Administratora (news/admin.py)

    • Panel Django automatycznie generuje interfejs do operacji CRUD (Create, Read, Update, Delete) na obiekcie News.
    • Zastosowano zaawansowane konfiguracje (np. list_display, list_filter, search_fields), które ułatwiają zarządzanie masowymi wpisami.

Instrukcja uruchomienia (Lokalnie)

Aby przetestować projekt w lokalnym środowisku, upewnij się, że posiadasz zainstalowanego Pythona (wersja 3.8+).

1. Klonowanie i przygotowanie środowiska

Stwórz wirtualne środowisko, aby odizolować pakiety Pythona:

python3 -m venv venv

Aktywuj środowisko:

  • Na systemach Linux/macOS:
    source venv/bin/activate
    
  • Na systemach Windows:
    venv\Scripts\activate
    

Zainstaluj zależności (w tym przypadku bazowy Django):

pip install django

2. Konfiguracja bazy danych

Utwórz i zastosuj migracje bazy danych, aby Django stworzył niezbędne tabele w pliku SQLite:

python manage.py makemigrations
python manage.py migrate

3. Tworzenie konta administratora

Aby móc zarządzać treścią dynamicznie, konieczne jest posiadanie konta typu "superuser". (Jeżeli zostało utworzone wcześniej, np. login: admin, hasło: admin, możesz ten krok pominąć).

python manage.py createsuperuser

Postępuj zgodnie z instrukcjami na ekranie, by ustawić nazwę użytkownika oraz hasło.

4. Uruchomienie serwera aplikacji

Uruchom wbudowany serwer deweloperski:

python manage.py runserver

Aplikacja będzie dostępna w przeglądarce pod adresem:

Zaloguj się do panelu admina używając konta z punktu 3 i dodaj kilka przykładowych "Aktualności", upewniając się, że zaznaczono opcję Czy aktywne?. Po ich dodaniu będą one natychmiast widoczne na stronie głównej.

Instrukcja rozbudowy (Dalsze kroki)

Aplikacja ma charakter bazowy. Oto sugestie dalszego rozwoju, które mogą podnieść wartość edukacyjną projektu:

  1. System Komentarzy:

    • W pliku news/models.py dodaj nowy model Comment zawierający klucz obcy (Foreign Key) wskazujący na obiekt News.
    • Stwórz w news/forms.py (nowy plik) klasę CommentForm dziedziczącą z forms.ModelForm.
    • Zaktualizuj widok szczegółów NewsDetailView, tak aby pobierał i obsługiwał przychodzący formularz metodą POST.
  2. Obsługa obrazków do artykułu:

    • Dodaj pole image = models.ImageField(upload_to='news_images/', null=True, blank=True) w modelu News.
    • Zainstaluj bibliotekę Pillow (pip install Pillow), niezbędną do operacji na plikach graficznych w Django.
    • Zaktualizuj plik settings.py, dodając konfiguracje MEDIA_URL oraz MEDIA_ROOT, i dodaj te ścieżki do urls.py.
  3. Autoryzacja Użytkowników Frontendowych:

    • Skorzystaj z wbudowanych widoków logowania (django.contrib.auth.views.LoginView) i zarejestruj je w urls.py.
    • Zmodyfikuj szablon base.html, by ukazywał sekcję "Zaloguj się" lub "Witaj, [Nazwa Użytkownika]".
    • Użyj dekoratorów @login_required (dla widoków funkcyjnych) lub klas LoginRequiredMixin (dla widoków klasowych), by ograniczyć dostęp do pewnych widoków.
  4. Kategoryzacja Aktualności:

    • Dodaj nowy model Category i przypisz mu relację One-to-Many z modelem News.
    • Stwórz mechanizm filtrowania wyników w NewsListView za pomocą nadpisania metody get_queryset() bazującej na wybranej z URL kategorii.