menu

Kurs Django Podstawa – #2 – Struktura Aplikacji

Posted on: August 7, 2024

Kurs Django Podstawa – #2 – Struktura Aplikacji

Django Podstawa – #2 – Struktura Aplikacji

Opisanie struktury Django na podstawie prostej aplikacji “Strony ze sklepem”

Pierwsza aplikacja ma na celu pokazać możliwości Django. Stworzymy aplikację Sklep, która przechowywać będzie dane w bazie danych. Omówimy strukturę projektu Django, skupiając się na plikach: models.py, urls.py, views.py. Pokażemy też przykładowe zastosowanie naszej aplikacji w postaci działania bezpośrednio na komputerze, na którym jest odpalony serwer Django.
Będziemy korzystać ze stworzonego w poprzednim rozdziale (#1) serwera, na Windowsie. Jako narzędzia do pisania kodu użyjemy Pycharm`a oraz Pythona w wersji 3.10.

Przechodzimy do folderu z naszym serwerem, aktywujemy go (żeby był w nawiasach na konsoli) i zakładamy naszą aplikację. Możemy mieć kilka na jednym serwerze i stworzyć relację między nimi, póki co jedna wystarczy :P

Kod na stworzenie aplikacji:

python manage.py startapp Sklep

 

kurs-django-robot-2-im1.png

Teraz tworzymy nieco wyglądającą na niepotrzebną strukturę, folder ‘templates’, a w nim folder ‘Sklep’ i dopiero tu będziemy zapisywać nasze pliki HTML.

kurs-django-robot-2-im2.png

Tworzymy konto admina, aby móc w prosty sposób dodawać obiekty do bazy danych:

python manage.py createsuperuser
kurs-django-robot-2-im3.png

Nasz nick to: AdminSklep, mail nie jest wymagany i aby pominąć, wystarczy kliknąć enter. Hasło ustawiamy na 12345 i od razu wyświetla się komunikat, że jest ono słabe i zawiera same cyfry. Nie przejmujemy się tym teraz, ale jak zaczniesz tworzyć swoje własne projekty, pamiętaj, żeby hasło było silne!

Uwaga!!!, jak masz zapięte pasy, to jeszcze załóż kask, bo będziemy skakać między plikami, które opisane są poniżej niczym Małysz. Dlatego będzie trzeba się troszeczkę skupić, ale gdy zrozumiesz działanie Django na przykładzie, będzie tylko prościej :D. Polecamy najpierw stworzyć albo uzupełnić pliki tak jak w przykładach, a na końcu zastanowić się na spokojnie jak działają.

1. models.py

W tym pliku tworzymy klasy, które będą odpowiadały tabelom w naszej bazie danych. Każda kolumna (atrybut) musi posiadać unikalną nazwę i mieć zdefiniowany typ (np. Text.Field, CharField).

class Produkt(models.Model):
  nazwa = models.CharField(max_length=50)
  opis = models.TextField(blank=True)
  cena = models.TextField(blank=True)
  def __str__(self):
    return self.nazwa

  class Meta:
    verbose_name = "Produkt"
    verbose_name_plural = "Produkty"
kurs-django-robot-2-im4.png

Klasa Produkt posiada 3 atrybuty (‘nazwa’ z maksymalną ilością znaków 50, ‘opis’ oraz ‘cena’ z dodatkiem ‘blank=True’, który mówi Django, że ten atrybut może pozostać pusty).
def __str__(self) jest to funkcja, która zwraca nam nazwę produktu, gdy będziemy chcieli wywołać dany obiekt po numerze ID.

Wewnętrzna klasa Meta posiada atrybuty, które nakazują wyświetlanie klasy Produkt w bazie danych pod nazwą Produkt. Bez tego mielibyśmy ‘s’ na końcu, z języka angielskiego, a w sumie po co. Tak będzie bardziej przejrzyście.

2. settings.py

W tym pliku informujemy Django, z jakich aplikacji korzystamy. Póki co dodajemy tu tylko naszą aplikację ‘Sklep’. Oprócz niej znajdują się tutaj inne standardowe biblioteki.

kurs-django-robot-2-im5.png

Aktywujemy wcześniejszy model w konsoli, żeby Django zaktualizowało informacje o nowo dodanej aplikacji.

python manage.py makemigrations Sklep

a następnie

python manage.py migrate
kurs-django-robot-2-im6.png

Pamiętaj o tym, żeby zawsze wpisywać te komendy, gdy coś zmieniasz w pliku models.py lub gdy dodasz nową aplikację w pliku settings.py.

3. admin.py

W tym pliku pozwalamy adminowi na dodawanie obiektów wcześniej utworzonej przez nas klasy do bazy danych.

Jak dodać obiekty, będzie za chwilę ;D

from .models import Produkt
admin.site.register(Produkt)
kurs-django-robot-2-im7.png

Aby dodać obiekty do bazy danych, w tym momencie uruchomimy serwer i zalogujemy się swoim loginem i hasłem jako administrator.

kurs-django-robot-2-im8.png

W wyszukiwarce wpisujemy ip_serwera_lokalnego:port/admin:

http://127.0.0.1:8000/admin
kurs-django-robot-2-im9.png
kurs-django-robot-2-im10.png

Po zalogowaniu się jako administrator naszym oczom ukazuje się panel, w którym możemy dodać do bazy pierwsze obiekty.

kurs-django-robot-2-im11.png
kurs-django-robot-2-im12.png
kurs-django-robot-2-im13.png

Wciskając przycisk save, dodaliśmy dwa produkty.

Aby zarządzać bazą danych, możemy wykorzystać konsolę. Dzięki niej jesteśmy w stanie np. wyświetlić wszystkie dodane przez nas obiekty:

python .manage.py shell

Importujemy klasę Produkt z aplikacji Sklep:

from Sklep.models import Produkt

Wyświetlamy wszystkie obiekty klasy Produkt:

Produkt.objects.all()

Wyświetlamy atrybut Opis obiektu o id=1, w naszym przypadku pierwszym obiektem był "Modbus":

Produkt.objects.get(id=1).opis
kurs-django-robot-2-im14.png

4. views.py

W tym pliku definiujemy nasze funkcje (kod, jaki ma się wykonać). W tym przypadku funkcja będzie miała za zadanie otworzyć stronę i wyświetlić produkty z bazy danych.
Najpierw importujemy klasę Produkt, żebyśmy mieli połączenie między plikiem ‘views’ a ‘models’:

from Sklep.models import Produkt

Tworzymy funkcję main_page,

def main_page(request):

zapisujemy produkty pobierane z bazy danych:

produkty = Produkt.objects.all()

I wysyłamy w paczce “dane” do strony HTML, która je wyświetli:

dane = {'produkty':produkty}
return render(request, 'Sklep/index.html', dane)
kurs-django-robot-2-im15.png

5. urls.py

Plik urls.py pozwala nam ustawiać linki, które jednocześnie uruchomią kod pod daną nazwą funkcji. W tym przypadku funkcji main_page w pliku views.py

Importujemy wszystkie funkcje z pliku views.py (gwiazdka oznacza wszystko)

from Sklep.views import *

Dodajemy ścieżkę, która uruchomi funkcję main_page

path('', main_page),

W tym przypadku ścieżka domyślna http://127.0.0.1:8000/ uruchomi tę funkcję.

kurs-django-robot-2-im16.png

6. templates -> index.html

Wracamy teraz do struktury folderów pod pliki HTML. Jeśli pojawiłby się problem ze strukturą HTML, dawaj znać ;D.
Język HTML działa tutaj w taki sam sposób jak gdzie indziej, możemy dodawać bootstrap’y (bootstrap - biblioteka do HTML z różnymi przydatnymi funkcjami). Na razie estetykę naszej strony pominiemy milczeniem, ale jeszcze wrócimy do tego w przyszłości :D

Tak więc dodajemy plik index.html w folderze templates/Sklep:

<p>Sklep</p>
<p>Witaj w moim sklepie, zobacz nasze produkty</p>
{% for produkt in produkty %}
<li>{{ produkt }}</li>
{% endfor %}

 

kurs-django-robot-2-im17.png

<p> to w HTML rodzaj nagłówka, wyświetli się trochę większy napis niż bez tego. Dodałem też prostą pętlę for, która dla każdej wartości (nazwałem tę wartość ‘produkt’) w zbiorze ‘produkty’ (ten zbiór przekazaliśmy w funkcji main_page w pliku views.py), wypisze tę wartość. Czyli wynikiem końcowym powinniśmy po uruchomieniu serwera i wejściu na stronę otrzymać wyświetlone produkty.

kurs-django-robot-2-im18.png

Podsumowanie

Stworzyliśmy stronę, która wyświetla produkty przechowywane w bazie danych. Czyli po uruchomieniu serwera Django, kliknij w link http://127.0.0.1:8000/, który jest zapisany jako domyślny w pliku “urls.py” (5). Teraz Django szuka funkcji przypisanej do linku w pliku “views.py” (4) i wykonuje tę funkcję. U mnie jest to “main_page”. W definicji funkcji mamy kod, który pobiera wszystkie obiekty klasy Produkt stworzonej w models.py (1) w aplikacji Sklep, którą dodałem w pliku settings.py (2). Produkty musiałem wcześniej dodać logując się jako admin do bazy danych http://127.0.0.1:8000/admin i pozwalając Django na dostęp do nich w pliku admin.py (3). W dalszej części wykonywanego kodu zapisuję pobrane dane i wyświetlam je na stronie HTML (6).

Category: Kurs Django Podstawa