Django rakenduste kasutamine
Virtualenv tööriista abil saab luua isoleeritud Pythoni keskkondi. Virtualenv loob kataloogi, milles hoitakse Pythoni projekti jaoks paigaldatud moodulite koodi. See võimaldab serverisse paigaldada ka selliseid mooduleid, mida ei ole eelinstalleeritud.
Virtualenvi tuleb kasutada SSH keskkonnas käsurealt. SSH ligipääsu saab lisada iseteenindusest.
Loome kõikide virtualenv'ide jaoks kataloogi:
mkdir ~/.virtualenvs
Loome konkreetse projekti virtualenvi, nimetame selle "website":
virtualenv ~/.virtualenvs/website
Aktiveerime projekti virtualenvi:
source ~/.virtualenvs/website/bin/activate
Nüüd saab paigaldada vajalikke mooduleid. Selleks võtame appi tööriista pip. Paigaldame soovitud django versiooni:
pip install Django==5.0
Soovitavalt tuleks virtualenvi kohe ära paigaldada Django jooksutamiseks vajalik flup moodul:
pip install flup6
Hea praktika on hoida projekti kood htdocs kataloogist kataloogi võrra ülevalpool ehk juurkataloogis. Liigume sinna kataloogi:
cd ~
Kasutame django-admin tööriista uue django projekti alustamiseks, nimetame selle "djangoveeb":
~/.virtualenvs/website/bin/django-admin startproject djangoveeb
Siseneme projekti kataloogi.
cd ~/djangoveeb
Loome uue rakenduse djangoveebi projekti, nimega "home":
python manage.py startapp home
Avame faili djangoveeb/urls.py
Lisame uue impordi importide juurde:
from home import views
Lisame urlpatternsitesse uue lingi reegli, mis käsitleks avalehte (url(r'^$', views.index),):
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^, views.index),
]
Avame faili ~/djangoveeb/home/views.py
Lisame uued impordid importide juurde:
from django.http import HttpResponse
from django import get_version
Lisame avalehe funktsiooni index, mis tagastab jooksva django versiooni info.
# Create your views here.
def index(request):
return HttpResponse("Running django " + get_version())
Muudame ~/djangoveeb/settings.py faili.
Lisame oma domeeni ALLOWED_HOSTS listi (asenda domeen.ee oma domeeni nimega, kus leht jooksma hakkab):
ALLOWED_HOSTS = ['domeen.ee']
Kommenteerime andmebaasi osa, kuna selle rakenduse puhul andmebaasi ei kasutata:
DATABASES = {
#'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
}
Andmebaasi kasutava rakenduse puhul tuleb tavapärase "localhost" asemel kasutada hostina IP-aadressi 127.0.0.1.
'HOST': '127.0.0.1', # not localhost
Veebiserverites on pythonis kirjutatud koodi jooksutamine vaikimisi lubatud. Seda tuleb teha läbi FastCGI, mille rakendamise saab seadistada .htaccess faili kaudu.
Vaikimisi on FastCGI kasutamine seadistatud veebilehe ~/htdocs/cgi-bin kataloogi sees (kui seda ei ole, siis loo see). Selleks, et django FastCGI kaudu tööle panna, tuleb luua ~/htdocs/cgi-bin kataloogi fail django.fcgi:
#!/usr/bin/env python3.9
import sys, os
DOMAIN = "domeen.ee" # Teie domeeni nimi (ilma www.-ta)
APPNAME = "djangoveeb" # Django applikatsiooni nimi
PREFIX = "/www/apache/domains/www.%s" % (DOMAIN,)
# Add a custom Python path.
sys.path.insert(0, os.path.join(PREFIX, APPNAME))
sys.path.insert(0, os.path.join(PREFIX, ".virtualenvs/website/lib/python3.9/site-packages/"))
# Switch to the directory of your project. (Optional.)
os.chdir(os.path.join(PREFIX, APPNAME))
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % (APPNAME,)
import django
django.setup()
from flup.server.fcgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
WSGIServer(WSGIHandler()).run()
Failile tuleb anda käivitamise õigus:
chmod +x ~/htdocs/cgi-bin/django.fcgi
NB! Veendu, et failides (näiteks django.fcgi sees) oleksid kasutusel UNIX reavahetused. Muidu ei hakka django rakendus tööle.
Järgmiseks tuleb ~/htdocs/.htaccess faili lisada reeglid, mis lubavad .fcgi failide tuvastamise FastCGI skriptina ja suunavad veebipäringud django.fcgi faili.
Options +ExecCGI
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteRule ^(media.*)$ $1 [QSA,L,PT]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ cgi-bin/django.fcgi/$1 [QSA,L]
Avades veebilehe, peaks seal kuvatama "Running django x.y.z".
E-kirjade saatmine djangost
E-kirjade saatmiseks installime mooduli:
pip install django_sendmail_backend
Lisame ~/djangoveeb/djangoveeb/settings.py faili lõppu:
EMAIL_BACKEND = 'django_sendmail_backend.backends.EmailBackend'
Lisame ~/djangoveeb/home/views.py index funktsiooni enne return HttpResponse("Running django " + get_version()) rida:
send_mail(u'test', 'test', 'no-reply@domeen.ee', ['saaja@domeen.ee'])
Abistavad tähelepanekud
Koodimuudatuste rakendumine
Kui veebilehte on juba avatud, võib django protsess jooksmas olla ja koodi muutmise järel ei kajastu need muudatused uuel lehe laadimisel koheselt. Seetõttu tuleks pärast koodimuudatusi jooksev pythoni protsess peatada, et see saaks lehe värskendamisel värske koodiga tööle hakata.
pkill -f dispatch.fcgi
Pythoni versioon
Näidiskood kasutab pythoni vaikimisi versiooni, milleks on juhendi kirjutamise hetkel python 3.9. Kui soovid kasutada python 3.10/3.11/3.12 versiooni, siis tuleks virtualenv tekitada järgnevalt:
python3.10 -m venv ~/.virtualenvs/website
ja kasutada django.fcgi faili alguses:
#!/usr/bin/env python3.10
ning samas failis python 3.10 virtualenvi pakkide teekonda:
sys.path.insert(0, os.path.join(PREFIX, ".virtualenvs/website/lib/python3.10/site-packages/"))
Pythoni veateadete logi
Veebiserveri pealogile pole kahjuks klientidele võimalik ligipääsu tekitada. Seetõttu pythoni koodi veateateid vaadata ei saa, kuid abiks võib olla koodi käsitsi käivitamine käsurealt:
python ~/htdocs/cgi-bin/django.fcgi
Flup
Kui serveris puudub uue django jooksutamiseks vajalik flup moodul, siis saab selle ise virtualenvis paigaldada:
pip install flup6