Django: Różnice pomiędzy wersjami
Kacperinjo (dyskusja | edycje) (→Django 1.7 i nowsze) |
|||
(Nie pokazano 40 wersji utworzonych przez 5 użytkowników) | |||
Linia 1: | Linia 1: | ||
− | + | ''Django'' to otwarty, napisany w [[Python|Pythonie]] framework przeznaczony do tworzenia aplikacji [[WWW]]. Na serwerach ''MyDevil.net'' możliwe jest uruchamianie stron opartych o ten framework dzięki zastosowaniu technologii ''Phusion Passenger''. | |
− | [ | + | === Wstępna konfiguracja === |
− | + | ||
+ | Do uruchomienia strony napisanej w ''Django'' należy najpierw zadbać o prawidłową konfigurację środowiska oraz domeny. Przed przystąpieniem do dalszych kroków należy upewnić się, że: | ||
+ | |||
+ | * Dodano środowisko [[virtualenv]] dla pythona 3.X (lub 2.X przy starszych projektach) i zainstalowano Django - <code>pip install Django</code>. | ||
+ | * Domena jest prawidłowo dodana i skonfigurowana w naszym systemie [[DNS]]. | ||
+ | * Została dodana [[WWW|strona WWW]] typu [[python]] oraz ścieżką do pliku binarnego <code class="directory>python</code> wewnątrz wcześniej skonfigurowanego środowiska. | ||
+ | |||
+ | === Projekt Django === | ||
+ | |||
+ | Głównym katalogiem projektu ''Django'' (tj. katalogiem, w którym znajduje się plik <code class="directory">manage.py</code>) musi być folder <code class="directory">/usr/home/''login''/domains/''domena''/public_python</code>. Nazwa projektu ''Django'' nie ma znaczenia, dopóki zachowana jest powyższa nazwa katalogu. Należy również usunąć plik index.html poleceniem <code>rm /usr/home/''login''/domains/''domena''/public_python/public/index.html</code> | ||
+ | |||
+ | ==== Nowy projekt Django ==== | ||
+ | |||
+ | Nowy projekt Django należy utworzyć w katalogu <code class="directory">/usr/home/''login''/domains/''domena''/public_python</code> - najprostszym sposobem utworzenia odpowiedniego projektu jest wydanie następujących poleceń: | ||
+ | |||
+ | cd /usr/home/''login''/domains/''domena''/ | ||
+ | rm -rf public_python | ||
+ | django-admin.py startproject public_python | ||
+ | |||
+ | W ostatnim poleceniu można zmienić nazwę <code class="directory">public_python</code> na dowolną nazwę projektu - należy wtedy pamiętać, że projekt zostanie utworzony w katalogu o tej właśnie nazwie, którą trzeba zmienić na <code class="directory">public_python</code>. | ||
+ | |||
+ | ==== Istniejący projekt Django ==== | ||
+ | |||
+ | Istniejący projekt ''Django'' należy umieścić jako katalog <code class="directory">/usr/home/''login''/domains/''domena''/public_python</code>. W przypadku gdy projekt nie nazywa się <code class="directory">public_python</code> należy zmienić jego nazwę. | ||
+ | |||
+ | === Konfiguracja ''Phusion Passenger'' === | ||
+ | |||
+ | Ostatnim krokiem jest konfiguracja modułu ''Phusion Passenger'', który jest odpowiedzialny za uruchomienie aplikacji ''Django''. Należy w katalogu projektu Django (<code class="directory">/usr/home/''login''/domains/''domena''/public_python</code>) utworzyć plik <code class="directory">passenger_wsgi.py</code> i umieścić w nim następującą zawartość (zależnie od wersji Django), modyfikując linijkę wskazującą nazwę aplikacji (oznaczoną komentarzem): | ||
+ | |||
+ | ==== Django 1.7 i nowsze ==== | ||
+ | <syntaxhighlight lang="python"> | ||
+ | import os | ||
+ | import sys | ||
+ | from urllib.parse import unquote | ||
+ | |||
+ | from django.core.wsgi import get_wsgi_application | ||
+ | |||
+ | sys.path.append(os.getcwd()) | ||
+ | os.environ['DJANGO_SETTINGS_MODULE'] = "nazwa_aplikacji.settings" # zmienić 'nazwa_aplikacji' na | ||
+ | # nazwę projektu Djang | ||
+ | def application(environ, start_response): | ||
+ | environ["PATH_INFO"] = unquote(environ["PATH_INFO"]).encode('utf-8').decode('iso-8859-1') | ||
+ | _application = get_wsgi_application() | ||
+ | return _application(environ, start_response) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Django do wersji 1.6 włącznie ==== | ||
+ | <syntaxhighlight lang="python"> | ||
+ | import sys, os | ||
+ | |||
+ | sys.path.append(os.getcwd()) | ||
+ | os.environ['DJANGO_SETTINGS_MODULE'] = "nazwa_aplikacji.settings" # zmienić 'nazwa_aplikacji' na | ||
+ | # nazwę projektu Django | ||
+ | |||
+ | import django.core.handlers.wsgi | ||
+ | application = django.core.handlers.wsgi.WSGIHandler() | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Nazwa aplikacji ==== | ||
+ | |||
+ | Nazwę aplikacji (projektu ''Django'') można wyciągnąć z pliku <code class="directory">manage.py</code> poleceniem <code>grep DJANGO_SETTINGS_MODULE manage.py</code>. | ||
+ | |||
+ | ==== Testowanie konfiguracji ==== | ||
+ | |||
+ | Poprawność konfiguracji modułu ''Phusion Passenger'' można sprawdzić wydając polecenie <code>python passenger_wsgi.py</code> - jeśli aplikacja nie zwróci żadnych błędów to znaczy, że aplikacja powinna zostać prawidłowo uruchomiona przez passengera. | ||
+ | |||
+ | {{Warning|Polecenie <code>python passenger_wsgi.py</code> sprawdzi jedynie poprawność konfiguracji modułu ''Phusion Passenger'' - w przypadku błędów samej aplikacji Django, zostaną one obsłużone przez moduł, bądź samo Django. | ||
+ | |||
+ | Błąd uniemożliwiający start aplikacji sprawi, że na stronie zostanie wyświetlony generyczny błąd ''Phusion Passenger''. Błędy w trakcie działania aplikacji zostaną złapane przez ''Django'' i ich obsługa jest zależna od konfiguracji samej aplikacji.}} | ||
+ | |||
+ | === Restart aplikacji === | ||
+ | |||
+ | Restart aplikacji ''Django'' można wykonać za pomocą naszego [[DevilWEB|panelu zarządzania usługą]] w zakładce [[WWW]], lub przy użyciu polecenia [[Devil|systemu zarządzania kontem Devil]]: <code>devil www restart ''domena''</code>. Przy restarcie nie są usuwane pliki <code>.pyc</code>. | ||
+ | |||
+ | === Pliki statyczne === | ||
+ | |||
+ | Wszystkie pliki umieszczone w <code class="directory">/usr/home/''login''/domains/''domena''/public_python/public</code> są serwowane jak pliki statyczne. W tym katalogu najlepiej umieścić wszystkie obrazki, skrypty, style, itp. Żądania do plików znajdujących się w tym folderze nie będą przetwarzane przez skrypty Django i nie będą obciążać interpretatora. Na przykład plik <code class="directory">/usr/home/''login''/domains/''domena''/public_python/public/robots.txt</code> będzie dostępny pod adresem http://''domena''/robots.txt. | ||
+ | |||
+ | Aby umieścić wszystkie pliki statyczne django w <code class="directory">/usr/home/''login''/domains/''domena''/public_python/public</code>, należy w pliku <code class="directory">settings.py</code> dodać: | ||
+ | <syntaxhighlight lang="python"> | ||
+ | STATIC_URL = '/static/' | ||
+ | MEDIA_URL = '/media/' | ||
+ | |||
+ | # Zmienna BASE_DIR powinna być utworzona przez Django w pliku settings.py | ||
+ | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) | ||
+ | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | ||
+ | |||
+ | STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'static') | ||
+ | MEDIA_ROOT = os.path.join(BASE_DIR, 'public', 'media') | ||
+ | # albo | ||
+ | # STATIC_ROOT = '/home/login/domains/domain/public_python/public/static/' | ||
+ | # MEDIA_ROOT = '/home/login/domains/domain/public_python/public/media/' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Po czym trzeba w konsoli wykonać polecenie <code>python manage.py collectstatic</code>. | ||
+ | |||
+ | === Czas życia aplikacji === | ||
+ | |||
+ | W przypadku braku ruchu na stronie przez 24h aplikacja jest wyłączana automatycznie i ponownie automatycznie uruchamiana przy pierwszym następnym wejściu. W przypadku zmiany w konfiguracji po naszej stronie również aplikacja jest automatycznie wyłączana i uruchamiana przy następnym pierwszym wejściu na stronę. | ||
+ | |||
+ | === Odnośniki zewnętrzne === | ||
+ | |||
+ | * [https://www.djangoproject.com/ Django project] | ||
+ | * [https://www.phusionpassenger.com/ Phusion Passenger] | ||
[[Category:Python]] | [[Category:Python]] |
Aktualna wersja na dzień 20:08, 17 sty 2022
Django to otwarty, napisany w Pythonie framework przeznaczony do tworzenia aplikacji WWW. Na serwerach MyDevil.net możliwe jest uruchamianie stron opartych o ten framework dzięki zastosowaniu technologii Phusion Passenger.
Spis treści
Wstępna konfiguracja
Do uruchomienia strony napisanej w Django należy najpierw zadbać o prawidłową konfigurację środowiska oraz domeny. Przed przystąpieniem do dalszych kroków należy upewnić się, że:
- Dodano środowisko virtualenv dla pythona 3.X (lub 2.X przy starszych projektach) i zainstalowano Django -
pip install Django
. - Domena jest prawidłowo dodana i skonfigurowana w naszym systemie DNS.
- Została dodana strona WWW typu python oraz ścieżką do pliku binarnego
python
wewnątrz wcześniej skonfigurowanego środowiska.
Projekt Django
Głównym katalogiem projektu Django (tj. katalogiem, w którym znajduje się plik manage.py
) musi być folder /usr/home/login/domains/domena/public_python
. Nazwa projektu Django nie ma znaczenia, dopóki zachowana jest powyższa nazwa katalogu. Należy również usunąć plik index.html poleceniem rm /usr/home/login/domains/domena/public_python/public/index.html
Nowy projekt Django
Nowy projekt Django należy utworzyć w katalogu /usr/home/login/domains/domena/public_python
- najprostszym sposobem utworzenia odpowiedniego projektu jest wydanie następujących poleceń:
cd /usr/home/login/domains/domena/ rm -rf public_python django-admin.py startproject public_python
W ostatnim poleceniu można zmienić nazwę public_python
na dowolną nazwę projektu - należy wtedy pamiętać, że projekt zostanie utworzony w katalogu o tej właśnie nazwie, którą trzeba zmienić na public_python
.
Istniejący projekt Django
Istniejący projekt Django należy umieścić jako katalog /usr/home/login/domains/domena/public_python
. W przypadku gdy projekt nie nazywa się public_python
należy zmienić jego nazwę.
Konfiguracja Phusion Passenger
Ostatnim krokiem jest konfiguracja modułu Phusion Passenger, który jest odpowiedzialny za uruchomienie aplikacji Django. Należy w katalogu projektu Django (/usr/home/login/domains/domena/public_python
) utworzyć plik passenger_wsgi.py
i umieścić w nim następującą zawartość (zależnie od wersji Django), modyfikując linijkę wskazującą nazwę aplikacji (oznaczoną komentarzem):
Django 1.7 i nowsze
import os import sys from urllib.parse import unquote from django.core.wsgi import get_wsgi_application sys.path.append(os.getcwd()) os.environ['DJANGO_SETTINGS_MODULE'] = "nazwa_aplikacji.settings" # zmienić 'nazwa_aplikacji' na # nazwę projektu Djang def application(environ, start_response): environ["PATH_INFO"] = unquote(environ["PATH_INFO"]).encode('utf-8').decode('iso-8859-1') _application = get_wsgi_application() return _application(environ, start_response)
Django do wersji 1.6 włącznie
import sys, os sys.path.append(os.getcwd()) os.environ['DJANGO_SETTINGS_MODULE'] = "nazwa_aplikacji.settings" # zmienić 'nazwa_aplikacji' na # nazwę projektu Django import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Nazwa aplikacji
Nazwę aplikacji (projektu Django) można wyciągnąć z pliku manage.py
poleceniem grep DJANGO_SETTINGS_MODULE manage.py
.
Testowanie konfiguracji
Poprawność konfiguracji modułu Phusion Passenger można sprawdzić wydając polecenie python passenger_wsgi.py
- jeśli aplikacja nie zwróci żadnych błędów to znaczy, że aplikacja powinna zostać prawidłowo uruchomiona przez passengera.
Polecenie python passenger_wsgi.py
sprawdzi jedynie poprawność konfiguracji modułu Phusion Passenger - w przypadku błędów samej aplikacji Django, zostaną one obsłużone przez moduł, bądź samo Django.
Błąd uniemożliwiający start aplikacji sprawi, że na stronie zostanie wyświetlony generyczny błąd Phusion Passenger. Błędy w trakcie działania aplikacji zostaną złapane przez Django i ich obsługa jest zależna od konfiguracji samej aplikacji.
Restart aplikacji
Restart aplikacji Django można wykonać za pomocą naszego panelu zarządzania usługą w zakładce WWW, lub przy użyciu polecenia systemu zarządzania kontem Devil: devil www restart domena
. Przy restarcie nie są usuwane pliki .pyc
.
Pliki statyczne
Wszystkie pliki umieszczone w /usr/home/login/domains/domena/public_python/public
są serwowane jak pliki statyczne. W tym katalogu najlepiej umieścić wszystkie obrazki, skrypty, style, itp. Żądania do plików znajdujących się w tym folderze nie będą przetwarzane przez skrypty Django i nie będą obciążać interpretatora. Na przykład plik /usr/home/login/domains/domena/public_python/public/robots.txt
będzie dostępny pod adresem http://domena/robots.txt.
Aby umieścić wszystkie pliki statyczne django w /usr/home/login/domains/domena/public_python/public
, należy w pliku settings.py
dodać:
STATIC_URL = '/static/' MEDIA_URL = '/media/' # Zmienna BASE_DIR powinna być utworzona przez Django w pliku settings.py # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'static') MEDIA_ROOT = os.path.join(BASE_DIR, 'public', 'media') # albo # STATIC_ROOT = '/home/login/domains/domain/public_python/public/static/' # MEDIA_ROOT = '/home/login/domains/domain/public_python/public/media/'
Po czym trzeba w konsoli wykonać polecenie python manage.py collectstatic
.
Czas życia aplikacji
W przypadku braku ruchu na stronie przez 24h aplikacja jest wyłączana automatycznie i ponownie automatycznie uruchamiana przy pierwszym następnym wejściu. W przypadku zmiany w konfiguracji po naszej stronie również aplikacja jest automatycznie wyłączana i uruchamiana przy następnym pierwszym wejściu na stronę.