Pytania ogólne
Dlaczego ten projekt istnieje?
Django powstało w odpowedzi na konkretny problem: World Online, dział WWW
gazety w Lawrence, jest odpowiedzialny za intensywne tworzenie aplikacji
internetowych z dziennikarskimi terminami. W szybko zmieniającym sie
środowisku prasowym, World Online ma niekiedy tylko kilka godzin na wykonanie
skomplikowanej aplikacji internetowej, licząc od koncepcji do publicznego
uruchomienia.
Jednocześnie deweloperzy World Online zawsze byli perfekcjonistami, jeżeli
chodzi o najlepsze praktyki tworzenia aplikacji internetowych.
Pod koniec 2003 roku deweloperzy World Online (Adrian Holovaty i Simon
Willison) zerwali z PHP i zaczęli używać Pythona do rozwijania serwisów
internetowych. Podczas intensywnego tworzenia bogatych, interaktywnych
serwisów, takich jak Lawrence.com, zaczęli wydobywać wspólne elementy
tworzenia serwisów internetowych, które pozwoliły im coraz szybciej budować
aplikacje. Stale ulepszali ten framework, dodając coraz to nowe funkcje.
Latem 2005 roku firma World Online zdecydowała się na publiczne udostępnienie
powstałego oprogramowania jako Django. Ponieważ stworzenie Django nie byłoby
możliwe bez całej masy projektów wolnego oprogramowania — Apache,
Python, PostgreSQL oraz jeszcze kilku innych — byli zachwyceni, że
mogą odwdzięczyć sie tym społeczności wolnego oprogramowania.
Co oznacza “Django” i jak się to wymawia?
Nazwa Django pochodzi od Django Reinhardt, cygańskiego gitarzysty jazzowego
z lat 1930-1950. Do dnia dzisiejszego jest uważany za jednego z najlepszych
gitarzystów wszechczasów.
Posłuchaj tej muzyki, a spodoba Ci się.
Django wymawiamy JANG-oh, rym z FANG-oh. D jest tutaj nieme (tak wymawiają
Amerykanie).
Udostępniamy także nagranie audio przedstawiające wymowę.
Czy Django jest stabilne?
Tak. Firma World Online używa Django od więcej niż trzech lat. Serwisy
budowane na Django bez większych problemów wytrzymują ruch na poziomie jednego
miliona wyświetleń na godzinę, a nawet więcej. Tak, jest całkiem stabilne.
Czy Django jest skalowalne?
Tak. W porównaniu do całkowitego kosztu budowy aplikacji internetowej, sprzęt jest
dość tani. Dlatego też Django jest tak zaprojektowane,
aby maksymalnie wykorzystać środowisko sprzętowe w którym będzie pracować.
Django wykorzystuje architekturę “shared-nothing”, co oznacza możliwość
dodawania sprzętu na dowolnym poziomie — serwery baz danych, serwery cache
oraz serwery WWW.
Framework czysto rozdziela takie komponenty jak warstwa bazy danych i warstwa
aplikacji. Dostarcza również prosty (lecz o ogromnych możliwościach)
framework cache.
Kto za tym stoi?
Django zostało stworzone w firmie World Online, dziale WWW gazety w Lawrence, Kansas, USA.
- Adrian Holovaty
Adrian jest deweloperem webowym z dziennikarskim doświadczeniem. Był głównym
programistą w World Online przed 2,5 roku, czyli w czasie, w którym Django
zostało stworzone i wdrożone na serwisach World Online.
Teraz pracuje w washingtonpost.com budując bogate, bazodanowe serwisy
informacyjne oraz kontynuuje rozwój Django. Lubi grać na gitarze (w stylu
Django Reinhardta) oraz udziela się w pobocznych projektach, takich jak
chicagocrime.org. Mieszka w Chicago.
Na IRC’u , Adrian jest znany jako adrian_h.
- Jacob Kaplan-Moss
Jacob to zapaleniec z Kalifornii, który podobną ilość czasu spędza na
pisaniu kodu i gotowaniu. Jest głównym programistą w World Online, ale
aktywnie uczestniczy również w kilku innych projektach pobocznych.
Uczestniczył w tworzeniu dowiązań ObjC dla Pythona i był pierwszą osobą,
która wymyśliła, w jaki sposób pisać w Pythonie aplikacje Tivo.
W ostatnim czasie stara się uruchomić Pythona na PSP. Mieszka w Lawrence,
Kansas, USA.
Na IRC’u, Jacob jest znany jako jacobkm.
- Simon Willison
Simon jest szanowanym deweloperem z Angli. Miał roczny staż w World Online,
podczas którego on oraz Adrian stworzyli Django od podstaw. Jest to
najbardziej entuzjastyczny Brytyjczyk jakiego kiedykolwiek byś mógł spotkać,
jest pasjonatem najlepszych praktyk tworzenia serwisów internetowych oraz
od lat pisze często czytany i znany blog web developerski
http://simonwillison.net. Pracuje dla Yahoo w Wielkiej Brytanii, gdzie udało
mu się zdobyć tytuł “Hacker Liason.” Mieszka w Londynie.
Na IRC’u, Simon jest znany jako SimonW.
- Wilson Miner
Projektowe sztuczki Wilcona sprawiają, że czujemy się wszyscy jak gwiazdy
rocka. Za dnia jest interaktywnym projektantem Apple. Nie pytaj go nad
czym pracuje, bo będzie musiał Cię zabić. Mieszka w San Francisco.
Na IRC’u, Wilson jest znany jako wilsonian.
Jakie serwisy używają Django?
Strona Wiki Django zawiera ciągle powiększającą się listę serwisów opartych o
Django. Śmiało możesz dodać tam Twój serwis oparty o Django. Dodatkowo możesz
przejrzeć serwis DjangoSites., który kolekcjonuje wszystkie serwisy używające
Django.
Django wydaje się być framework’iem o wzorcu MCV, ale nazywacie kontroler “widokiem”, widok “szablonem”. Dlaczego nie używacie standardowych nazw?
Podejście do nazw standardowych jest dyskusyjne.
W naszej interpretacji wzorca MVC, “widok” opisuje dane, które są prezentowane
użytkownikowi. To niekoniecznie jak dane wyglądają, ale które dane są
prezentowane. Widok opisuje, które dane widzisz, a nie jak je widzisz. To
subtelna różnica.
W naszym przypadku “widok” jest wywołaniem funkcji Pythona przez konkretny
URL, dlatego że wywołanie funkcji opisuje, które dane są prezentowane.
Ponadto, uważamy za rozsądne oddzielać zawartość od prezentacji — w tym miejscu
dochodzimy do szablonów. W Django “widok” opisuje, które dane są prezentowane,
ale widok jest przekierowywany do szablonu, który opisuję jak dane są
prezentowane.
Gdzie w takim razie jest “kontroler”? W przypadku Django jest to
prawdopodobnie sam framework: mechanizm, który wysyła żądanie do odpowiedniego
widoku zgodnie z konfiguracją URL’i Django.
Jeżeli mielibiśmy stosować skróty, moglibyśmy powiedzieć, że Django jest frameworkiem
“MTV” — czyli “model”, “szablon”, “widok”.
Mamy pracę do zrobienia i ostatecznie liczy się efekt — nie ważne jak
rzeczy się nazywają. Django wg nas pozwala, wykonać tą pracę w
najbardziej logiczny sposób.
<Framework X> ma <funkcje Y> — Dlaczego nie ma jej w Django?
Jesteśmy świadomi tego, że na święcie są inne znakomite frameworki. Nie
jesteśmy przeciwni zapożyczania pomysłów, kiedy uznamy to za stosowne. Jednak
Django zostało stworzone dlatego, że nie byliśmy zadowoleni ze status quo.
Tak więc bądź świadom, że argument typu “ponieważ <Framework X> to ma” nie jest
wystarczającym powodem na dodanie danej funkcji do Django.
Dlaczego napisaliście Django od podstaw zamiast użyć gotowych bibliotek Pythona?
Kilka lat temu, na początku powstawania Django, Adrian i Simon
spędzili całkiem sporo czasu na rozpoznaniu różnych dostępnych Pythonowych
frameworków WWW.
Niestety żadne z nich nie były dla nas w pełni zadowalające.
Jesteśmy wybredni. Możesz nawet nas nazwać perfekcjonistami (z terminami).
Z czasem natknęliśmy się na biblioteki open-source, wykonujące rzeczy,
które już mieliśmy zaimplementowane. Zauważyliśmy, że inni ludzie rozwiązują
podobne problemy w podobny sposób, jednak było już za późno na integrację:
mieliśmy już napisane, przetestowane i zaimplementowane własne kawałki
fremeworka w kilku ustawieniach produkcyjnych — i nasz kod uroczo
spełniał wszystkie wymagania.
W wielu przypadkach obserwowaliśmy, że istniejące frameworki/narzędzia
miały pewnego rodzaju fundamentalne wady, które sprawiły, że staliśmy
się wybredni. Żadne narzędzie nie zgadzało się w 100% z naszą filozofią.
Tak jak wspominaliśmy: jesteśmy wybredni.
Udokumentowaliśmy naszą filozofię na stronie filozofii projektowej (en).
Czy Django jest systemem zarządzania treścią (CMS)?
Nie, Django nie jest CMS’em, ani żadnym tego typu produktem. To framework
webowy; narzędzie programistyczne, które ułatwia budowanie serwisów
internetowych.
Nie m sensu porównywać Django z projektami typu Drupal. Django to narzędzie,
za pomocą którego możesz stworzyć właśnie systemy takie jak Drupal.
Oczywiście, automatyczny panel administracyjny Django jest fantastyczny i
oszczędza czas — jest on jednak tylko jednym z modułów Django. Choć
w Django wygodnie tworzy się aplikacje typu “CMS”, nie oznacza to,
że nie nadaje się ono do budowania aplikacji “nie-CMS” (cokolwiek to
oznacza!).
Jak mogę pobrać dokumentacje Django, aby czytać ją offline?
Dokumentacja Django jest dostępna w katalogu docs każdego pakietu Django.
Pliki dokumentacji są w formacie ReST (ReStructured Text). Każdy plik
odpowiada stronie www z oficjalnej dokumentacji.
Ponieważ dokumentacja jest trzymana w systemie kontroli wersji (en), możesz
śledzić jej zmiany, tak jakbyś przeglądał zmiany w kodzie.
Technicznie rzecz ujmujac, dokumentacja na stronie głównej Django jest generowana
z najnowszej wersji deweloperskiej plików ReST. Może się więc okazać, że treść
na głównej stronie Django oferuje więcej informacji niż wersja dostarczana ze
stabilnym pakietem Django.
Gdzie mogę znaleźć programistów Django szukających zleceń?
Sprawdź naszą stronę programiści do zatrudnienia (en), znajdziesz tam całą listę
programistów, którzy z radością Ci pomogą.
Pytania instalacyjne
Jakie wymagania ma Django?
Django wymaga Pythona 2.3 lub nowszego. Żadna inna biblioteka nie jest
wymagana do normalnego używania Django.
Dla środowiska rozwojowego — jeżeli po prostu chcesz poeksperymentować z
Django — nie potrzebujesz mieć zainstalowanego dedykowanego serwera WWW; Django
dostarcza swój własny “lekki” serwer rozwojowy. Dla środowiska produkcyjnego,
zalecamy Apache 2 oraz mod_python. Pamiętaj jednak, że Django spełnia kreteria
określone w specyfikacji WSGI, co oznacza że możesz go używać z różnymi platformami
serwerowymi.
Jeżeli chcesz używać Django z bazą danych, będziesz potrzebował także silnika
bazy danych. Polecamy PostgreSQL, ponieważ jesteśmy jego fanami, jednak
MySQL, SQLite 3 i Oracle są również wspierane.
Czy coś tracę używając Pythona 2.3 zamiast najnowszego, takiego jak Python 2.5?
Nie. Django samo w sobie gwarantuje że będzie działać z każdą wersją Pythona
od 2.3 i wyższych.
Oczywiście jeżeli będziesz używać nowszej wersji Pythona niż 2.3, będziesz
w stanie skorzystać z nowych możliwości języka jakie oferuje nowsza wersja Pythona
razem ze zwiększeniem wydajności i pozostałymi optymalizacjami jakie zostały wykonane
w samym języku Python. Mimo wszystko framework Django powinien działać tak samo dobrze
z Pythonem 2.3 jak i 2.4 czy 2.5.
Czy muszę używać mod_python’a?
W prawdzie zalecamy stosowanie mod_pythona na użytek produkcyjny, jednak nie musisz
go używać, dzięki temu, że Django korzysta ze specyfikacji WSGI. Django może
porozumiewać się z dowolnym serwerem, który wspiera standard WSGI. Inne
konfiguracje nie używające mod_python’a to FastCGI, SCGI, AJP, mod_wsgi.
Zobacz Jak używać Django z FastCGI, SCGI lub AJP (en) aby uzyskać więcej
informacji.
Zobacz także stronę Przygotowanie serwera (en) aby poznać inne sposoby wdrożenia.
Jeżeli tylko chcesz się pobawić i przetestować Django na swoim komputerze,
użyj serwera WWW, który jest dostarczony razem z Django - na pewno się sprawdzi.
Jak zainstalować mod_python na Windows?
Czy Django będzie działać na hostingu dzielonym (jak TextDrive lub Dreamhost)?
Zobacz stronę Django - przyjazne hostingi (en).
Czy powinienem używać oficjalnej wersji czy rozwojowej?
Developerzy Django ulepszają Django każdego dnia, są dobrzy w tym co robią i
nie publikują nie działającego kodu. My używamy wersji rozwojowej (z
repozytorium Subversion) bezpośrednio na naszych serwerach i uważamy, że
jest stabilna. Mając to na myśli, polecamy stosowanie najnowszej wersji
rozwojowej, ponieważ generalnie zawiera więcej funkcji i mniej usterek niż
“oficjalne” wydanie.
Bazy danych i modele
Jak mogę zobaczyć rzeczywiste zapytanie SQL podczas działania Django?
Upewnij sie że ustawienie DEBUG z Django ma wartość True. Następnie (używając shell-a wpisz:
>>> from django.db import connection
>>> connection.queries
[{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]
connection.queries dostępne jest tylko, jeżeli DEBUG jest równe
True. To jest lista słowników w kolejności wywołania zapytania. Każdy
słownik ma:
``sql`` -- Treść zapytania SQL
``time`` -- Jak długo zajęło wykonanie zapytania, w sekundach.
connection.queries zawiera wszystkie zapytania SQL — INSERT’y, UPDATE’y,
SELECT’y, itd. Za każdym razem, gdy Twoja aplikacja wykonuje zapytanie do bazy, zapytanie zostanie zapamiętane.
Jeżeli wprowadzę zmiany do modelu, to jak mogę zrobić update bazy danych?
Jeżeli nie jest dla Ciebie problemem wyczyszczenie danych, to narzędzie
manage.py z Twojego projektu ma opcję resetowania SQL dla konkretnej
aplikacji:
manage.py reset twoja_aplikacja
To polecenie usuwa wszystkie tabele skojarzone z twoja_aplikacja i tworzy je na nowo.
Jeżeli jednak nie chcesz usunąć danych, musisz ręcznie wykonać wyrażenie
ALTER TABLE na Twojej bazie danych. W taki sposób robiliśmy to zawsze,
ponieważ działanie na danych to delikatna operacja dlatego też w tym przypadku
chcieliśmy uniknąć automatyzacji. Trwają prace, aby dodać funkcjonalność częściowej automatyzacji
aktualizacji schematu bazy danych (przp. tłum. zainteresuj się narzędziem dbmigration (en) dla Django`).
Czy modele w Django obsługują klucze główne składające się z kilku kolumn?
Nie. Obsługiwane są tylko jednokolumnowe klucze główne.
W praktyce to nie jest problem, ponieważ nic Cię nie zatrzymuje przed dodaniem
innego ograniczenia (używając opcji modelu unique_together lub tworząc
ograniczenie bezpośrednio w bazie danych), wymuszając unikalność na tym
poziomie. Jednokolumnowe klucze główne są potrzebne, aby interface admina mógł
działać; np. musisz w łatwy sposób być w stanie określić obiekt do edycji lub
usunięcia.
Jak dodać specyficzne opcje dla bazy danych do wyrażenia CREATE TABLE, takie jak określenie typu tabeli jako MyISAM?
Staramy się unikać specjalnych przypadków w kodzie Django, aby spełnić
wszystkie specyficzne opcje baz danych takie jak typy tabel itd. Jeżeli
chciałbyś używać jakichkolwiek z tych opcji, stwórz plik inicjujący dane
SQL (en), który zawiera wyrażenie ALTER TABLE modyfikujące to, co
potrzebujesz. Pliki inicjujące są wykonywane na bazie danych po wyrażeniach
CREATE TABLE.
Na przykład, jeżeli używasz MySQL’a i chciałbyś, aby Twoje tabele używały typu
MyISAM, stwórz plik inicjujący dane i wstaw tam coś takiego:
ALTER TABLE moja_aplikacja_mojatabela ENGINE=MyISAM;
Jak opisano w dokumentacji, pliki inicjujące dane SQL (en), plik SQL
może zawierać dowolny kod SQL, tak więc możesz dokonać dowolnych zmian, jakich
potrzebujesz.
Dlaczego Django ma wycieki pamięci?
Django nie jest znane z wycieków pamięci. Jeżeli zauważysz, że procesy Django
alokują coraz więcej pamięci bez śladu zwalniania jej, sprawdz czy Twoje
ustawienie DEBUG ma wartość True. Jeżeli DEBUG ustawione jest na True,
wtedy Django zapisuje każde wykonane zapytanie SQL.
(Zapytania są zapisane w django.db.connection.queries. Zobacz
Jak mogę zobaczyć rzeczywiste zapytanie SQL podczas działania Django?.)
Aby naprawić problem, ustaw DEBUG na False.
Jeżeli potrzebujesz wyczyścić listę zapytań ręcznie w Twoim kodzie, po prostu
wywołaj reset_queries() w taki sposób:
from django import db
db.reset_queries()
Panel administracyjny
Nie mogę się zalogować. Kiedy wprowadzam nazwę użytkowanika oraz hasło, pojawia się strona logowania bez żadnych błędów.
Login cookie nie został poprawnie ustawiony, ponieważ domena cookie wysłana
przez Django nie zgadza się z domeną Twojej przeglądarki. Spróbuj dwóch rzeczy:
- Ustaw SESSION_COOKIE_DOMAIN w pliku konfiguracyjnym, aby pasowało do
Twojej domeny. Na przykład jeżeli w przeglądarce otwierasz adres “http://www.mojserwis.pl/admin/“,
w ustawieniach Twojego projektu powinieneś ustawić SESSION_COOKIE_DOMAIN = 'www.mojserwis.pl'.
- Niektóre przeglądarki (Firefox?) nie lubią akceptować cookies z domen,
które nie mają kropek w środku. Jeżeli używasz panelu administracyjnego
na “localhost” lub w innej domenie która nie ma kropek w nazwie, spróbuj
użyć “localhost.localdomain” lub “127.0.0.1” dla ustawienia SESSION_COOKIE_DOMAIN.
Nie mogę się zalogować. Kiedy wprowadzam nazwę użytkownika oraz hasło, pojawia strona logowania, z błędem “Proszę wprowadź poprawną nazwę użytkownika i hasło”.
Jeżeli jesteś pewien, że Twoja nazwa użytkownika i hasło są poprawne, upewnij
się, że Twój użytkownik ma ustawione is_active oraz is_staff na True.
Panel administracyjny pozwala na dostęp tylko użytkownikom, którzy mają te dwa
pola ustawione na True.
Jak mogę zapobiec, aby cache middleware nie cache’ował panelu administracyjnego?
Ustaw CACHE_MIDDLEWARE_ANONYMOUS_ONLY na True. Zobacz dokumentacje
cache’u, aby uzyskać więcej informacji.
Jak automatycznie ustawić wartość pola na użytkownika, który ostatnio edytował obiekt w adminie?
W tym przypadku, Django nie ma oficjalnego “właściwego” sposobu. Jednak jest to funkcjonalność,
o którą prosi wielu ludzi, więc rozważamy jak to zaimplementować. Problem w tym, że
nie chcemy łączyć warstwy modelu z warstwą admina oraz warstwą żądania (aby pobrać
aktualnie zalogowanego użytkownika. Jest to dość zawiły problem.
Jedna osoba znalazła rozwiązanie które nie wymaga zmian w kodzie źródłowym
Django (en), miej jednak na uwadze że jest to nieoficjalne rozwianie i nie ma
gwarancji, że za jakiś czas nie przestanie działać.
Jak ograniczyć dostęp w panelu administracyjnym, aby obiekty mogły być tylko edytowane przez użytkowników którzy je stworzyli?
Zobacz odpowiedź na poprzednie pytanie.
Style CSS oraz obrazki pojawiają się w adminie używając serwera developerskiego, ale nie wyświetlają się gdy używam mod_pythona.
Zobacz serwowanie plików admina (en) w dokumencie “Jak używać Django z mod_pythonem”.
Mój “list_filter” zawiera pole ManyToManyField, ale filtr nie jest wyświetlany.
Django nie wyświetla filtra dla pola ManyToManyField jeżeli są mniej niż
dwa powiązane obiekty.
Na przykład, jeżeli Twój list_filter zawiera strony, a w Twojej bazie
danych jest tylko jedna taka strona, wtedy filtr “Strona” nie zostanie
wyświetlony. W tym przypadku filtrowanie po stronach byłoby bezużyteczne.
Jak mogę zmienić funkcjonalność panelu administracyjnego?
Masz kilka opcji. Jeżeli chciałbyś zmodyfikować funkcjonalność w formularzu
dodawania/zmiany obiektu, możesz dodać dodatkowy JavaScript przez parametr
js w class Admin w modelu. Parametr ten jest listą URL’i wskazującymi na
pliki JavaScript, które zostaną załadowane w formularzu admina
jako znacznik <script>.
Jeżeli oczekujesz większej elastyczności niż po prostu zmieniając automatycznie
wygenerowane formularze, możesz śmiało napisać własny widok dla admina. Panel
administracyjny jest zasilany przez Django, więc możesz napisać własne widoki, które
integrują się systemem autoryzacji, sprawdzaniem uprawnień oraz cokolwiek
innego potrzebujesz.
Jeżeli chciałbyś zmienić wygląd interfejsu admina, przeczytaj kolejną opowiedź.
Dynamicznie generowany panel administracyjny jest brzydki! Jak mogę go zmienić?
Nam się podoba, ale jeżeli się nie zgadzasz, możesz zmodyfikować wygląd panelu
administracyjnego przez edycje arkusza CSS oraz/lub skojarzone obrazki. Strona
jest zbudowana z prostego HTML’a oraz stylów CSS, więc jakiekolwiek zmiany,
które chciałbyś wprowadzić, powinny być możliwe używając właśnie CSS. Przygotowaliśmy
poradnik do CSS’a wykorzystywanego w adminie (en)
Jeżeli zauważyłeś błędy w tłumaczeniu dokumentacji proszę zgłoś je nam.