python > Django Первое приложение
22.12.2015 13:12:46
Наиболее часто встречающиеся слова в статье:
[contrib] [''django] [settings] [''mysite] [каталог] [команду] [браузере] [приложение] [запустим] [__init__]
Статья:
Первое приложение
Для создания первого приложения зайдем в свой домашний каталог и запустим команду:
django-admin.py startproject mysite
Будет создан подкаталог mysite, где и будет лежать приложение. Заходим в созданный каталог и видим следующую файловую структуру:
mysite/ __init__.py manage.py settings.py urls.py
__init__.py – пустой файл, который подключает текущий каталог как стандартный питоновский пакет.
manage.py – утилита, управляющая сайтом.
settings.py – конфигурация сайта.
urls.py – таблица урлов или таблица для всего контента сайта.
Для того чтобы загрузить наше Web-приложение, запустим команду:
python manage.py runserver
Вывод:
Validating models... 0 errors found. Django version 1.1, using settings 'mysite.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Если теперь в браузере открыть адрес http://127.0.0.1:8000/, то убедимся в том, что приложение запущено: появится стандартное приглашение.
3. Подключение базы данных
Джанго поддерживает следующие серверы баз данных: PostgreSQL, SQLite, MySQL, Microsoft SQL Server, Oracle.
В нашем примере мы выбираем постгрес – не потому, что он лучше, это не имеет принципиального значения. Убедитесь в том, что постгрес уже установлен на вашей системе, в противном случае его нужно проинсталлировать. После этого в файле settings.py пропишем настройки для постгреса:
DATABASE_ENGINE = 'postgresql_psycopg2' DATABASE_NAME = 'mysite' DATABASE_USER = 'postgres' TIME_ZONE = 'Europe/Moscow' LANGUAGE_CODE = 'ru-ru'
Запускаем две команды, которые создают базу данных mysite – постгрес перед этим, естественно, должен быть уже запущен:
psql -d template1 -U postgres -c "DROP DATABASE mysite;" psql -d template1 -U postgres -c "CREATE DATABASE mysite WITH OWNER postgres ENCODING='UNICODE';"
Запускаем команду, которая создает в этой базе около 10 системных таблиц:
python manage.py syncdb
4. Первое представление
Теперь сгенерируем каркас для нашего Web-приложения:
python manage.py startapp People
Внутри каталога mysite появится подкаталог People со следующей структурой:
People/ __init__.py models.py tests.py views.py
Добавим в settings.py последнюю строку, которая добавляет новый путь:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'mysite.People' )
В settings.py в качестве корневого адреса должен быть:
ROOT_URLCONF = 'mysite.urls'
Создадим модель Person – стандартный питоновский класс с двумя атрибутами – имя, и-мейл. Файл models.py:
from django.db import models class Person(models.Model): name = models.CharField('name', max_length=200) email = models.EmailField('Email', blank=True) def __str__(self): return '%s' % (self.name)
После того как добавляется новая модель, ее нужно синхронизировать с базой данных. Для этого из командной строки выполняем команду:
python manage.py syncdb
После этого в базе данных появится новая таблица. Нужно заметить, что если вы после этого будете вносить изменения в уже существующую модель и пытаться синхронизировать эти изменения с базой данных, то джанго никак не будет на это реагировать: в базу добавляются только новые объекты. Для внесения изменений уже придется пользоваться sql-скриптами на апдэйт конкретных таблиц.
Теперь напишем простейшее представление, которое выведет приглашение-файл views.py:
from django.shortcuts import HttpResponse from mysite.People.models import Person def index(request): html = "<H1>People !!!</H1><HR>" return HttpResponse(html)
Добавим урл – файл urls.py:
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^People/$', 'mysite.People.views.index') )
Вновь запускаем Web-приложение:
python manage.py runserver
Открываем адрес в браузере и видим приглашение:
http://127.0.0.1:8000/People/
5. Шаблоны
В корне каталога mysite создадим каталог templates. В файле settings.py добавим строку:
TEMPLATE_DIRS = ( "/home/mysite/templates" )
Добавленный путь должен быть абсолютным. В добавленный каталог положим файл person.htnl следующего содержания:
<H1>People !!!</H1><HR> <table width=100%> <tr><td colspan="3"> Personal Information </td></tr> <tr valign="top"><td width=30%> <li>Name: {{p.name}}</li> </td> <td width=30%> <li>Email: {{ p.email }}</li> </td></tr> </table>
В нашем единственном представлении index мы сделаем изменения: создадим объект Person и передадим его в вызываемый шаблон в качестве параметра. В шаблоне мы берем атрибуты этого параметра с помощью префикса двойных кавычек:
{{p.name}} {{p.email}}
Файл views.py после подключения шаблона теперь будет выглядеть так:
from mysite.People.models import Person from django.shortcuts import render_to_response, get_object_or_404 def index(request): person = Person() person.name = 'Alex' person.email = 'Alex@gmail.com' return render_to_response('person.html', {'p': person})
После перезагрузки Web-страницы в браузере мы увидим эти атрибуты.
6. Администрирование
Администраторская часть в джанго по умолчанию отключена. Для ее включения добавим последнюю строку в settings.py:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'mysite.People', 'django.contrib.admin' )
Для работы с админской частью нужно иметь рутовые права, поэтому нужно вначале создать суперпользователя:
python manage.py createsuperuser
После этого запустим команду:
python manage.py syncdb
Файл urls.py с добавленным админским функционалом будет иметь следующий вид:
from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), (r'^People/$', 'mysite.People.views.index') )
Запускаем Web-приложение:
python manage.py runserver
Набираем в браузере адрес: http://127.0.0.1:8000/admin/. И попадаем на страницу логина. После ввода логина и пароля суперпользователя открывается админская часть. В ней можно добавлять и редактировать объекты.