Pytania twarde z rozmów Django Flashcards
Co to jest Django?
Django to darmowy i open-source’owy framework do tworzenia aplikacji webowych
Django vs Flask
Django pozwala budować duże projekty, podczas gdy Flask wspiera mniejsze aplikacje.
Django reprezentuje bardziej ‘batteries included approach’ co oznacza np. że szablony, panel administratora, czy ORM nie wymagają dodatkowej instalacji.
I możemy tworzyć pełne strony internetowe bez korzystania z wielu dodatkowych narzędzi. Podczas gdy Flask jest bardziej elastyczny i użytkownik może wybrać dowolne narzędzia innych firm zgodnie z własnymi wymaganiami.
Flask jest więc lżejszym i prostszym frameworkiem.
Djago nie ma też wizualnego debuggera jak flask, czyli nie możemy debugować testu podczas gdy jest on wykonywany.
Za to Django posiada swój Bootstrapping-tool, a Flask nie.
ORM
ORM (mapowanie obiektowo-relacyjne , ang. object Relational Mapping)
to konwersja danych pomiędzy obiektowym językiem programowania (Pythonem), a bazą danych (np. PostgreSQL) i odwrotnie
W Django object relational mapper umożliwia nam interakcję z bazą danych bez znajomości języka zapytań (SQL).
Mapper działa jako warstwa abstrakcji pomiędzy modelami, a bazą danych
firmy używających Django
Instagram, DISCUS, Mozilla Firefox, YouTube, Pinterest, Reddit
architektura Django
MVT
Django to framework oparty o model
MVT (Model View Template):
M model (,,model”))
V widok („view”).
T szablon („template”)
Deweloper dostarcza models, views i templates, odwzorowuje je na adresy urls, a następnie Django udostępnia je w postaci aplikacji użytkownikowi.
Model MTV jest oparty na architekturze MVC (Model View Controller).
Django różni się od MVC ponieważ zachowuje własne konwencje. Kontroler jest obsługiwany przez sam framework.
struktura plików/katalogów
manage.py - narzędzie wiersza poleceń, które umożliwia interakcję z projektem Django
__init.py__ pusty plik, który mówi Pythonowi, że bieżący folder powinien być traktowany jako pakiet Pythona
settings.py - plik konfiguracyjny projektu, zawierający ustawienia naszej aplikacji. Są tam określone ustawienia: bazy danych, secret key, zarejestrowane są aplikacje wchodzące w skład naszego projektu i wiele innych
urls.py - tutaj znajdują się wszystkie adresy URL (enpointy, routy) projektu
wsgi.py — to jest punkt wejścia dla naszej aplikacji, który jest używany przez serwery WWW do obsługi utworzonego przez nas projektu.
models
Model w Django odnosi się do klasy, zdefiniowanej w pliku models.py, która odwzorowuje tabelę bazy danych (zwykle 1 klasa to 1 tabela) lub kolekcję bazy danych.
Każdy atrybut tej klasy reprezentuje pole bazy danych.
Każda klasa (model), którą tworzymy dziedziczy po django.db.models.Model
W modelu określamy również typ danych, który będzie zamieszczany w danym polu tabeli. Robi się to za pomocą np, CharField, IntegerField, czy SlugField i zwykle określamy ich wielkość.
templates
templates (szablony) są integralną częścią architektury Django MVT.
Szablony obejmują zarówno pliki HTML jak i CSS oraz js. Przechowujemy w nich zmienne dynamiczne (zmienne i tagi) oraz hardcodowane informacje (np. ciągi tekstowe) wyświetlane pod różnymi adresami url. Pliki te są renderowane przy pomocy widoków (views.py).
Django template language
Pozwala na umieszczenie logiki w plikach szablonów:
{% %}
{{ }}
Zawiera takie konstrukty jak:
- zmienne
- tagi
- filtry
- komentarze
Dzięki temu językowi pliki HTML są bardziej dynamiczne i możemy wstrzykiwać do nich dane.
views
to metody napisane w Pythonie, które przyjmują żądania sieciowe (requesty) i zwracają odpowiedzi sieciowe (web responses).
Takimi odpowiedziami mogą być:
- wyrenderowany HTML danej strony,
- przekierowania
- błędy np. 404
- dokumenty XML
- obrazy itp.
Są dwa rodzaje views:
Function-Based Views ( Widoki oparte na funkcjach): w tym przypadku importujemy nasz widok jako funkcję.
Class-based Views (widoki oparte na klasach): podejście zorientowane obiektowo.
static files
Witryny zazwyczaj muszą udostępniać dodatkowe pliki, takie jak obrazy, pliki JavaScript czy CSS.
W Django pliki te są określane jako „pliki statyczne”. Poza tym Django udostępnia django.contrib.staticfiles do zarządzania tymi plikami statycznymi.
Django Rest Framework (DRF)
Django REST to specjalistyczny framework Python typu open source, który umożliwia budowę zaawansowanych interfejsów API
Dzięki temu programiści mogą budować zarówno proste w obsłudze interfejsy API, jak i skomplikowane systemy REST (Representational State Transfer), które umożliwiają komunikację pomiędzy API a aplikacją czy witryną internetową.
django-admin
django-admin to narzędzie wiersza poleceń Django do zadań administracyjnych.
Jinja templating
Jinja Templating to bardzo popularny silnik szablonów dla Pythona, najnowsza wersja to Jinja2.
Jinja2 − silnik szablonów dla języka programowania Python pozwalający na separację logiki aplikacji od jej warstwy prezentacyjnej.
Co robi?
- generuje szablony HTML znacznie szybciej niż domyślny silnik
- zapewnia łatwiejsze debugowanie w porównaniu z domyślnym silnikiem
- zapewnia też dziedziczenie szablonów
- zapewnia HTML escaping, czyli znaki takie jak <, >, &. mają specjalne wartości w szablonach
- pomaga automatyzować proces testowania (sandbox framework)
django manage.py
narzędzie wiersza poleceń, które umożliwia interakcję z projektem Django
urls
plik w którym do zmiennej urlpatterns przypiujemy zdefiniowane przez nas adresy url (endpointy) aplikacji. Mogą być one zarówno statyczne, jak i dynamiczne, i są one dopasowywane do równoważnej funkcji widoku.
Mapowanie pomiędzy adresami URL a widokami zapewnia moduł URLconf Django.
projekt a aplikacja
W prostych słowach Projekt to całość, na który składa się większość mniejszych aplikacji. Każda z tych aplikacji to moduł wewnątrz projektu, który zajmuje się jednym konkretnym przypadkiem użycia.
Na przykład mamy projekt Allegro, a w nim mniejszą aplikację: obsługa koszyka
dziedziczenie modeli w Django
- Abstract Base Class Inheritance
używany, gdy potrzebujemy klasy nadrzędnej do przechowywania informacji, których nie chcemy pisać dla każdego modelu podrzędnego. - Multi-Table Model Inheritance
używany, gdy tworzymy podklasę istniejącego modelu i potrzebujemy, aby każdy model miał własną tabelę w bazie danych. - Proxy Model Inheritance
używane, gdy chcemy zachować pole modelu podczas zmiany funkcjonowania modelu na poziomie Pythona.
mixin
forma wielokrotnego dziedziczenia
zapewnia metody dla innych klas ale sama nie jest uważana za klasę bazową
Mixiny zapewniają doskonały sposób na ponowne wykorzystanie kodu z wielu klas.
sesje
Sesja – tymczasowo, zapamiętane na serwerze dane dotyczące połączenia z klientem.
Sesje są w pełni obsługiwane w Django. Korzystając z ram sesji, można łatwo przechowywać i pobierać tymczasowe dane na podstawie liczby odwiedzających witrynę
Ta struktura przechowuje dane po stronie serwera i zajmuje się wysyłaniem i odbieraniem plików cookie. Te pliki cookie składają się z identyfikatora sesji, ale nie z samych danych, chyba że wyraźnie użyjesz cookie-based backend.
Pillow
dodatkowa biblioteka dla Django, która umożliwia obsługę plików obrazów
middleware
Middleware w Django to niskopoziomowy system “wtyczek” wpływających na dane przesyłane do i z aplikacji Django.
Obrazując middleware to kod, który będzie automatycznie wykonywany przed/po wykonaniu widoku, przed wysłaniem odpowiedzi do klienta (przeglądarki)
migracje
Django używa migracji do propagowania zmian wprowadzanych w modelach do bazy danych.
databases supported by Django
PostgreSQL
MySQL
SQLite
MariaDB
Oracle