Django: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
откат
Строка 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> - это как раз код, который выполняется.
[[Изображение:ArificialBreath.JPG|thumb|260 px|right|Искусственное дыхание «рот-в-рот»]]
Наиболее эффективный способ искусственного дыхания.
# Спасите пострадавшего, уберите от него ток, если он им поражён, вытащите из воды при утоплении, обеспечьте его безопасность.
# Положите пострадавшего на спину. Откройте ему рот, следите, чтобы язык не закрывал гортань.
# Одной рукой удерживайте голову и шею пострадавшего, другой зажмите его нос. Глубоко вдохните и, плотно прижавшись ртом ко рту, сделайте выдох.
# Первые 5—10 выдохов делайте быстро (за 20—30 с), следующие— со скоростью 12—15 выдохов в минуту.
# Следите за движением грудной клетки пострадавшего: если после вашего выдоха в рот его грудная клетка поднялась, значит, дыхательные пути проходимы и искусственное дыхание вы делаете правильно.
# Если нет пульса, параллельно с искусственным дыханием необходимо делать массаж сердца.
 
<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]]