Kurs Django - pierwsze kroki

Kurs django pierwsze kroki ma celu bardzo wstępne poznanie django, zgodnie z podejściem:

  1. To jest auto
  2. To jest kierownica i pedał gazu.
  3. Po opanowaniu powyższego możemy przejść do biegów itd.

Tym samym skupimy się tylko na czynnościach niezbędnych w każdym kroku.

Wymagania wstępne

  1. Zainstalowany python >= 3 (jak zainstalować python)
  2. Zainstalowana baza danych sqlite

Przygotowanie projektu

Wykonaj poniższe polecenia w terminalu (nie musisz jeszcze ich w pełni rozumieć):

mkdir django-pierwsze-kroki # tworzymy katalog 
cd django-pierwsze-kroki    # wchodzimy do stworzonego katalogu
python3 -m venv venv        # inicjalizujemy wirtualne środowisko
source venv/bin/activate    # aktywujemy wirtualne środowisko
pip install django          # instalujemy django w wirtualnym środowisku
1
2
3
4
5

Pierwszy projekt

django-admin startproject project # tworzymy strukturę projektu
cd project                        # wchodzimy do projektu
1
2

Wpisz w terminalu polecenie tree, aby zobaczyć strukturę plików i katalogów projektu (komenda nie jest domyślnie dostępna w każdym systemie).

├── manage.py           # plik startowy projektu
└── project             # katalog z danymi i konfiguracją projektu
    ├── __init__.py	
    ├── settings.py     # konfiguracja projektu
    ├── urls.py		 
    └── wsgi.py		
1
2
3
4
5
6

Sprawdźmy, czy wszystko działa. Uruchamiamy nasz projekt poleceniem runserver.

python manage.py runserver 
1

Aby zatrzymać serwer wystarczy kombinacja klawiszy control-c (ctrl-c).

Jeśli nie pracujesz na lokalnym komputerze

Django domyślnie uruchamia serwer na 127.0.0.1 (localhost) na porcie 8000. Jeśli pracujesz na zdalnym serwerze należy wykonać dodatkowo 2 kroki:

  1. Ustawiamy w pliku settings.py

    ALLOWED_HOSTS = ['*'] 
    
    1
  2. Używamy pełnej nazwy serwera oraz port.

    Przy założeniu, że nasz serwer to example.com, a port to 8000.

    python manage.py runserver example.com:8000
    
    1

Otwieramy http://127.0.0.1:8000/. Naszym oczom powinna ukazać się startowa strona django.

Dla ułatwienia proponuję uruchomić drugie okno z linią poleceń i wykonać

cd django-pierwsze-kroki    # wchodzimy do katalogu z projektem
source venv/bin/activate   # aktywujemy wirtualne środowisko
1
2

Dlaczego dwa okna?

  1. W pierwszym oknie uruchomiony będzie serwer aplikacji. Po każdej wprowadzonej zmianie w projekcie serwer wykryje ją i zrestartuje się. (UWAGA! Przy niektórych błędach, może zaistnieć potrzeba ponownego uruchomienia serwera aplikacji ręcznie).
  2. W drugim oknie możemy modyfikować kod w projekcie oraz wykonywać polecenia zarządzające projektem.

Inicjalizacja bazy danych

Django domyślnie instaluje kilka aplikacji w projekcie, najważniejsze to:

  • auth - użytkownicy, grupy, uprawnienia,
  • admin - panel administratora,
  • sessions - informacje m.in. o zalogowanych użytkownikach.

Pierwszym krokiem będzie stworzenie struktury bazy danych projektu. W tym celu wywołajmy polecenie migrate w naszym projekcie.

python manage.py migrate 
# Operations to perform:
#   Apply all migrations: admin, auth, contenttypes, sessions
# Running migrations:
#   Applying contenttypes.0001_initial... OK
#   Applying auth.0001_initial... OK
#   Applying admin.0001_initial... OK
#   Applying admin.0002_logentry_remove_auto_add... OK
#   Applying admin.0003_logentry_add_action_flag_choices... OK
#   Applying contenttypes.0002_remove_content_type_name... OK
#   Applying auth.0002_alter_permission_name_max_length... OK
#   Applying auth.0003_alter_user_email_max_length... OK
#   Applying auth.0004_alter_user_username_opts... OK
#   Applying auth.0005_alter_user_last_login_null... OK
#   Applying auth.0006_require_contenttypes_0002... OK
#   Applying auth.0007_alter_validators_add_error_messages... OK
#   Applying auth.0008_alter_user_username_max_length... OK
#   Applying auth.0009_alter_user_last_name_max_length... OK
#   Applying sessions.0001_initial... OK 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Jak usunąć bazę danych

W naszym podstawowym przykładzie używamy bazy danych sqlite, która znajduje się w pliku w katalogu project. Aby usunąć bazę danych należy usunąć plik.

rm project/db.sqlite3
1

Dodajmy pierwszego użytkownika

python manage.py createsuperuser
Username (leave blank to use 'john.smith'): admin
Email address: admin@example.com
Password: 
Password (again): 
Superuser created successfully.
1
2
3
4
5
6

Panel administratora w django

Przejdźmy na stronę logowania http://127.0.0.1:8000/admin/ i zalogujmy się danymi naszego pierwszego użytkownika.

Ponieważ projekt obecnie posiada tylko domyślne aplikacje, panel administratora daje nam możliwość zarządzania użytkownikami oraz grupami. Po wejściu w Users możemy na liście zobaczyć użytkownika, którego dodaliśmy z linii poleceń.

Naszym kolejnym krokiem będzie skonfigurowanie funkcjonalności dla naszej aplikacji.

Pierwsza aplikacja w django

Przejdźmy do stworzenia pierwszej aplikacji w naszym projekcie - książki kontaktowej.

Wywołujemy komendę startapp odpowiedzialną za przygotowanie struktury plików aplikacji.

python manage.py startapp contacts
1

Struktura projektu po utworzeniu aplikacji contacts.

├── contacts
│   ├── admin.py         # konfiguracja panelu administratora dla aplikacji
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations       # struktura aplikacji w bazie danych
│   │   └── __init__.py
│   ├── models.py        # struktura aplikacji w django
│   ├── tests.py
│   └── views.py
├── manage.py
└── project
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Zdefiniujmy pierwszy model. Otwieramy plik contacts/models.py i wstawiamy kod.

from django.db import models                

class Contact(models.Model):                 # nazwa modelu 
    name = models.CharField(max_length=100)  # nazwa kontaktu
    email = models.EmailField(blank=True)    # email - pole nieobowiązkowe
1
2
3
4
5

Następnie musimy poinformować nasz projekt o nowej aplikacji. W pliku project/settings.py w sekcji INSTALLED_APPS dodajemy wpis z nazwą naszej aplikacji.








 


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',                                                      
    'django.contrib.contenttypes', 
    'django.contrib.sessions',
    'django.contrib.messages',                                                  
    'django.contrib.staticfiles',
    'contacts',
]
1
2
3
4
5
6
7
8
9

Po zdefiniowaniu lub modyfikacji pól w modelach musimy wykonać zawsze dwie komendy. Pierwsza to makemigrations (generuje pliki z informacjami o wymaganych zmianach w bazie danych).

python manage.py makemigrations
# Migrations for 'contacts':
#  contacts/migrations/0001_initial.py
#    - Create model Contact
1
2
3
4

Po wygenerowaniu opisu zmian, musimy wywołać ich wprowadzenie do bazy danych (komenda migrate).

python manage.py migrate 
# Operations to perform:
#   Apply all migrations: contacts
# Running migrations:
#   Applying contacts.0001_initial... OK
1
2
3
4
5

Po wykonaniu polecania migrate nasza aplikacja jest gotowa do pracy.

Konfiguracja panelu administratora

Musimy teraz skonfigurować panel administratora. Otwieramy plik contacts/admin.py.

from django.contrib import admin
from contacts.models import Contact  # importujemy nasz model

admin.site.register(Contact)         # rejestrujemy nasz model w admin
1
2
3
4

Przejdźmy na stronę główną panelu http://127.0.0.1:8000/admin/

Nasza aplikacja jest już dostępna i możemy rozpocząć wprowadzanie danych. Dodajmy kilka kontaktów. Po zapisaniu możemy zobaczyć je na liście i wejść w edycję. Niestety forma prezentacji w postaci Contact object (1) jest nieczytelna oraz nie nadaje się do użytku.

Otwórzmy ponownie plik contancs/models.py i wprowadźmy małą zmianę.







 
 

from django.db import models                

class Contact(models.Model):                
    name = models.CharField(max_length=100)
    email = models.EmailField(blank=True)

    def __str__(self):		# domyślna prezentacja obiektu jako tekst
    	return self.name	# chcemy zobaczyć nazwę naszego kontaktu
1
2
3
4
5
6
7
8

__str__ to specjalna metoda służąca do prezentacji naszego obiektu jako tekst. Odśwież okno przeglądarki. Wpis Contact object (1) został zastąpiony nazwą naszego kontaktu.

Jednak widok na liście wyłącznie nazwy kontaktu jest nieoptymalny. Lista w postaci: nazwa | email byłaby dużo wygodniejsza.

Otwieramy plik contacts/admin.py




 
 

 

from django.contrib import admin
from contacts.models import Contact

class ContactAdmin(admin.ModelAdmin):      # opis modelu Contact w adminie
    list_display = ['name', 'email']       # pola jakie chcemy na liście

admin.site.register(Contact, ContactAdmin) # łączymy nasz model i konfigurację
1
2
3
4
5
6
7

Po zapisaniu pliku oraz odświeżeniu strony w przeglądarce, możemy obejrzeć efekt.

Dodanie nowego pola

Nasza aplikacja spełnia już swoją funkcję, jednak zapomnieliśmy, że warto byłoby przechowywać także telefon. Dodajmy nowe pole do naszego modelu.

Otwieramy plik contacts/models.py






 




from django.db import models                

class Contact(models.Model):                  
    name = models.CharField(max_length=100)  
    email = models.EmailField(blank=True)    
    phone = models.CharField(max_length=20, blank=True)  # dodajemy telefon

    def __str__(self):
      return self.name
1
2
3
4
5
6
7
8
9

Wygenerujmy i zastosujmy migracje, aby telefon był dostępny bazie danych.

python manage.py makemigrations
# Migrations for 'contacts':
#   contacts/migrations/0002_contact_phone.py
#     - Add field phone to contact
python manage.py migrate
# Operations to perform:
#   Apply all migrations: admin, auth, contacts, contenttypes, sessions
# Running migrations:
#   Applying contacts.0002_contact_phone... OK
1
2
3
4
5
6
7
8
9

Od teraz w edycji naszego kontaktu pojawi się nowe pole na telefon.

Dodajmy jeszcze nasze nowe pole na liście kontaktów. Otwieramy plik contacts/admin.py




 
 

 

from django.contrib import admin                                                   
from contacts.models import Contact                                                        
                                                                                   
class ContactAdmin(admin.ModelAdmin):
    list_display = ['name', 'email', 'phone']  # dodajemy nowe pole

admin.site.register(Contact, ContactAdmin)
1
2
3
4
5
6
7

Zapisujemy plik et voilà. Umiesz już podstawy i możesz tworzyć własne aplikacje w django.

Podsumowanie

Pierwszy kontakt z django za nami. Jak widać, przy odrobienie wysiłku, każdy może stworzyć proste struktury danych z wygodnym panelem administratora, w kilka minut. Jednak czy to wszystko, co może django admin? Oczywiście możliwości jest dużo więcej.

W najbliższych dniach zostanie dodany kurs dotyczący najczęściej używanych opcji w django admin. Zapisz się do newslettera, jeżeli chcesz otrzymać powiadomienie.

Pozostałe artykuły