Django: различия между версиями
Содержимое удалено Содержимое добавлено
Нет описания правки |
Innv (обсуждение | вклад) откат |
||
Строка 1:
{{wikipedia|Django}}Справочник по WEB-фреймворку Django, написанному на python. Уже существует документация и [http://djbook.ru книги] для Django, поэтому здесь будет только справочная информация (конфиги, кусочки скриптов).
= Начало работы =
== Установка django ==
<p>В Fedora просто: <code>yum install django</code></p>
<p>В Ubuntu : <code>sudo aptitude install python-django</code></p>
== Создание проекта ==
<em>Проект</em> в django может быть самостоятельным приложением, но в большой степени это просто структура директорий и настройки общие для всех приложений внутри. А <em>приложение</em> - это как раз код, который выполняется.
<code>django-admin.py startproject newproj</code>
Создаётся структура вида:
<pre>
newproj
|-- __init__.py - пуст, нужен, чтоб проект воспринимался как [[Учебник Python 3.1#Пакеты|пакет python]]
|-- manage.py - обёртка для django-admin.py, отличается тем, что учитывает текущие настройки проекта
|-- settings.py - файл настроек для приложений
`-- urls.py - описание URL-ов
</pre>
Создать приложение можно с помощью команды:
<code>python manage.py startapp newapp</code>
Создаётся структура вида:
<pre>
newproj
|-- ...
|-- ...
`-- newapp - новое приложение
|-- __init__.py
|-- models.py - описание модели приложения, описываются классы
`-- views.py - описывается логика приложения
</pre>
== Запуск проекта ==
Перед запуском надо записать изменения в базу данных (если она используется):
<code>python manage.py syncdb</code>
Также можно проверить на ошибки:
<code>python manage.py validate</code>
Запустить проект:
<code>python manage.py runserver</code>
Зайти по адресу: "http://127.0.0.1:8000/"
= Установка на Web-сервер =
== Запуск Lighttpd + FastCGI ==
Система Fedora 10.
Софт, который нужен:
lighttpd
lighttpd-fastcgi
django
Установка:
yum install django lighttpd lighttpd-fastcgi (Debian: aptitude install lighttpd python-django)
Проект в /tmp/mysite , типичный проект Django с приложением books и шаблонами.
<pre>
mysite
|-- __init__.py
|-- books
| |-- __init__.py
| |-- models.py
| |-- views.py
|-- manage.py
|-- mysite.fcgi
|-- settings.py
|-- templates
| |-- base.html
| |-- books
| | `-- search.html
| `-- mtemp.html
|-- urls.py
|-- ..
`-- views.py
</pre>
===== Настройка =====
Необходимо создайть файл mysite/mysite.fcgi:
<source lang="python">
#!/usr/bin/python
import sys, os
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
</source>
mysite.fcgi должен быть исполняемым.
Конфигурирация /etc/lighttpd/lighttpd.conf:
<source lang="apache">
# lighttpd configuration file
server.modules= (
...
"mod_fastcgi", #убедится что расскоментировали
... )
server.document-root = "/var/www/lighttpd" # тут можно оставить стандартный путь
# и например перенести туда media, css, js, img
...
fastcgi.server = ( "/mysite.fcgi" => # это наш файл mysite.fcgi
( "main" => # тут не понял, почему main
(
# "host" => "127.0.0.1", # можно и с этими параметрами, например
# "port" => 3033, # если наш проект на другом серваке
"socket" => "/tmp/mysite.sock", # а если на локальной машине, то можно
"check-local" => "disable", # через сокет
)
)
)
url.rewrite-once = (
"^(/media.*)$" => "$1",
"^/favicon\.ico$" => "/media/favicon.ico",
"^(/.*)$" => "/mysite.fcgi$1",
)
</source>
===== Запуск =====
Запускаем lighttpd
<code>[root@fabrica-35 ~]# /etc/init.d/lighttpd start</code>
Запуск проекта
<code>[mapcuk@fabrica-35 tmp]$ python /tmp/mysite/manage.py runfcgi socket=/tmp/mysite.sock</code>
===== Проверка =====
Запустился ли fast-cgi сервер
<source lang="bash">
[mapcuk@fabrica-35 tmp]$ ps ax | fgrep python
5170 ? S 0:00 python ./mysite/manage.py runfcgi socket=/tmp/mysite.sock
5171 ? S 0:00 python ./mysite/manage.py runfcgi socket=/tmp/mysite.sock
...
</source>
Внимание файл /tmp/mysite.sock должен быть разрешен для чтения и записи пользаветелю от которого запущен lighttpd (обычно тоже lighttpd)
<source lang="bash">
[mapcuk@fabrica-35 tmp]$ ps aux | fgrep lighttpd
lighttpd 4853 0.0 0.1 6584 1124 ? S 11:37 0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
mapcuk 5134 0.0 0.0 4244 704 pts/3 S+ 13:32 0:00 fgrep lighttpd
</source>
Проверяем работу приложения
Фрагмент /tmp/mysite/urls.py
<source lang="python">
...
(r'^search/$', 'mysite.books.views.search'),
...
</source>
И /tmp/mysite/books/views.py
<source lang="python">
...
def search(request):
query = request.GET.get('q', '')
...
return render_to_response("books/search.html", {
"results": results,
"query": query
})
</source>
В строку адреса браузера вводим http://127.0.0.1/search/
Должна показаться страница поиска.
===== Описание процесса =====
Lighttpd получает запрос от клиента (http://127.0.0.1/search/) отправляет запрос к FastCGI (процессу 'python ./mysite/manage.py runfcgi') через сокет /tmp/mysite.sock, получает ответ и отдаёт клиенту.
Остальные опции можно получить по команде:
<source lang="bash">
[mapcuk@fabrica-35 ~]$ python /tmp/mysite/manage.py runfcgi help
protocol=PROTOCOL fcgi, scgi, ajp, ... (default fcgi)
host=HOSTNAME hostname to listen on..
port=PORTNUM port to listen on.
socket=FILE UNIX socket to listen on.
method=IMPL prefork or threaded (default prefork)
outlog=FILE write stdout to this file.
errlog=FILE write stderr to this file.
</source>
Последнии 2 параметра удобны для поиска ошибок.
== Запуск httpd + mod_python ==
Конфиг /etc/httpd/conf.d/python.conf который потом вставляется в общий httpd.conf
Надо проверить что в /etc/httpd/conf/httpd.conf есть строчка
<code>Include conf.d/*.conf</code>
<source lang="apache">
Listen 8080 #подслушивать порт 8080
<VirtualHost localhost:8080>
<Location "/django"> #префикс к URL, например localhost:8080/django/search/
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysyte.setup #путь к /tmp/mysite/setup.py тот же settings.py
PythonOption django.root /django # переделывает урлы из localhost:8080/django/search/ в localhost:8080/search/
PythonDebug On
PythonPath "sys.path + ['/tmp']" # это путь к django проектам, а путь к django (/usr/lib/python2.5/site-packages) уже в sys.path
PythonAutoReload Off
</Location>
</VirtualHost>
LoadModule python_module modules/mod_python.so #загрузка модуля mod_python
</source>
Можно обращаться по адресу http://localhost:8080/django/search/ выдаётся страница поиска.
== Запуск httpd + mod_wsgi ==
Надо создать файлик <code>/tmp/mysite/django.wsgi</code>
<source lang="python">
#!/usr/bin/env python
import os, sys
sys.path.append('/tmp') #каталог с нашими проектами django
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.setup' #указывем на файлик /tmp/mysite/setup.py
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
</source>
И конфиг для <code>/etc/httpd/conf.d/wsgi.conf</code>
<source lang="apache">
LoadModule wsgi_module modules/mod_wsgi.so
Listen 7080
<VirtualHost localhost:7080>
WSGIScriptAlias / /tmp/mysite/django.wsgi
</VirtualHost>
</source>
Проверяем по адресу http://localhost:7080/search/ выдаётся страница поиска.
= Ссылки =
*[http://djangoproject.com/ Официальный сайт Django]
[[Категория:Информационные технологии]]
[[Категория:Веб-разработка]]
[[Категория:Python]]
|