Django Первое приложение

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/. И попадаем на страницу логина. После ввода логина и пароля суперпользователя открывается админская часть. В ней можно добавлять и редактировать объекты.