Django: Różnice pomiędzy wersjami

(Django 1.7 i nowsze)
 
(Nie pokazano 40 wersji utworzonych przez 5 użytkowników)
Linia 1: Linia 1:
{{Stub}}
+
''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''.
  
[https://www.djangoproject.com/ Django] to otwarty, napisany w [[Python|Pythonie] framework przeznaczony do tworzenia aplikacji [[WWW]]. Na serwerach [https://www.mydevil.net MyDevil.net] możliwe jest uruchamianie stron opartych o ten framework dzięki zastosowaniu technologii [https://www.phusionpassenger.com/ Phusion Passenger].
+
=== Wstępna konfiguracja ===
[[Category:WWW]]
+
 
 +
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ń 21: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.

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.

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ę.

Odnośniki zewnętrzne