Django rakenduste kasutamine (uus)

Virtualenv on tööriist, mille abil saab luua isoleeritud pythoni keskkondi. Virtualenv loob kataloogi, milles hakatakse hoidma pythoni projekti jaoks vajalikke paigaldatud moodulite koodi. See võimaldab kliendil serverisse paigaldada selliseid mooduleid, mida serverisse eelinstalleeritud pole või paigaldada nendest erinevaid versioone. Näiteks on serverisse eelpaigaldatud django, kuid juhendi kirjutamise hetkel on selle versioon 1.8.17. Väljas on aga juba versioon 1.11.3. Virtualenvi abil on võimalik endal serverisse see versioon djangost paigaldada.

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 on võimalik paigaldada vajalikke mooduleid, kasutades selleks tööriista pip. Piagaldame soovitud django versiooni:

pip install Django==1.11.3

Hea praktika on projekti kood hoida 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 (domeen.ee asemel kasutada oma domeeni nime, kus leht jooksma hakkab):

ALLOWED_HOSTS = ['domeen.ee']

Kommenteerime andmebaasi osa, kuna antud rakenduse puhul andmebaasi ei kasutata:

DATABASES = {
#'default': {
#       'ENGINE': 'django.db.backends.sqlite3',
#       'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#   }
}

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 (loo see ise kui seda pole). Selleks, et django FastCGI kaudu tööle panna, tuleb luua ~/htdocs/cgi-bin kataloogi fail django.fcgi:

#!/usr/bin/env python

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/python2.7/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

Seejärel tuleb ~/htdocs/.htaccess faili lisada reeglid, mis lubavad .fcgi failide tuvastamise FastCGI skriptina ja suunavad veebipäringud django.fcgi faili.

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 1.11.3".


Mailide saatmine djangost

Veebiserveris on SMTP kaudu mailide saatmine keelatud, kasutada tuleks sendmaili. Selleks 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, siis võib django protsess jooksmas olla ja koodi muutmise järel ei kajastu kohe muudatused uuel lehe laadimisel. Seetõttu tuleks peale koodimuudatusi jooksev pythoni protsess peatada, et see saaks uuesti lehe värskendamisel värske koodiga tööle hakata.

pkill -f dispatch.fcgi


Python 3.5

Näidiskood kasutab pythoni vaikimisi versiooni, milleks on juhendi kirjutamise ajal python 2.7. Juhul kui on soov kasutada python 3.5 versiooni, tuleks virtualenv tekitada järgnevalt:

python3.5 -m venv ~/.virtualenvs/website

ja kasutada django.fcgi faili alguses:

#!/usr/bin/env python3.5

ning samas failis python 3.5 virtualenvi pakkide teekonda:

sys.path.insert(0, os.path.join(PREFIX, ".virtualenvs/website/lib/python3.5/site-packages/"))


Pythoni veateadete logi

Veebiserveri pealogile pole kahjuks klientidele võimalik ligipääsu lubada, mistõttu ei saa vaadata pythoni koodi veateateid, kuid abiks võib olla koodi käsitsi käivitamine käsurealt:

python ~/htdocs/cgi-bin/django.fcgi


Flup

Juhul kui serveris puudub uue django jooksutamiseks vajalik flup moodul, on see võimalik ise virtualenvis paigaldada:

pip install flup6

Ei leidnud, mida otsisid? Küsi meilt, me aitame!

Helista numbril 683 5188 või kirjuta abi@veebimajutus.ee

Või saada oma küsimus siin, võtame sinuga ühendust nii pea, kui võimalik.

Vale vastus
Cart