Как установить Django на Denwer под Windows 7

7 июля 2013 г. YaGr Просмотров: 40888 RSS 18
Web design » Новости
Об установке Django на Denwer в интернете написано много статей, но для работы под операционной системой Windows 7 имеются небольшие особенности. Базовые поставки Denwer'а имеют в своём распоряжении Python 2.5.1, который не работает c MySQL под Windows 7. Для этого необходимо использовать версию 2,6 и выше, а ещё лучше установить Python 2.7 (Почему? Будет ясно позже).

Наверное у читателя возникнет сразу же вопрос: зачем Denwer? Ответ простой - для того. чтобы использовать базу данных MySQL, а не sqlite3, которая по умолчанию поддерживается Django и на реальном хостинге не используется.. MySQL используется на реальном хостинге и не будет необходимости учитывать особенности работы с базой данных. Кроме этого, реально можно будет посмотреть как будет выглядеть сайт на реальном хостинге и минимизировать время переноса сайта на реальный хостинг. Это дело вкуса и, если аргументов не достаточно, статью читать далее не обязательно.

Рассмотрим вариант, когда Denwer установлен с использованием виртуального диска Z: В данной статье установку Denwer'а рассматривать не будем, он ставится легко. Имеются некоторые ньюансы, с которыми можно ознакомиться в статье "Проблемы с Apache и SSL при запуске Denwer". Дальнейшие действия будем выполнять по пунктам:

1. Качаем с официального сайта последнюю версию Python 2.7.5 под Windows x86 MSI и при установке выбираем папку z:\usr\local\Python, в которую и устанавливаем.

2. Для работы с MySQL из под PYTHON'а необходимол скачать mysql-python, а именно MySQL-python-1.2.3.win32-py2.7.exe. Но, прежде чем начать установку, необходимо выполнить некоторые действия:

2.1. Операционная система должна знать, где расположен Python. Проверим доступность Python'а, для чего с командной строки необходимо ввести команду:

python -V
(-V с большой буквы). Если будет выведена версия программы,например,

Python 2.7.5
то дальнейшие действия п.2.1 выполнять не требуется. В противном случае,  внесем необходимые записи в реестр, для чего создаем файл python27.reg с таким содержимым:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Python]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPath]

@="z:\\usr\\local\\python"

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPath\InstallGroup]

@="Python 2.7"

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\Modules]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\PythonPath]

@="z:\\usr\\local\\python\\Lib;z:\\usr\\local\\python\\DLLs;z:\\usr\\local\\python\\Lib\\lib-tk"

и подгружаем файл python27.reg в реестр. Это можно сделать, например, дважды кликнув мышкой на файл.

Этот пункт необходимо делать только в том случае, если при установке MySQL-python-1.2.3.win32-py2.7.exe не будет найден проинсталлированный Python.

2.2. Устанавливаем MySQL-python-1.2.3.win32-py2.7.exe (при установке папка с Denwer'ом определится сама.

2.3. Добавляем в переменную среды Path в начало строки следующую запись: Z:\usr\local\python;Z:\usr\local\python\Scripts; Проверить потом можно командой set path и должны получить примерно такое:

Path=Z:\usr\local\python;Z:\usr\local\python\Scripts;C:\Program ...
Это условие для данного случая не обязательно, но будет необходимо потом при подключении mod_wsgi в Apache в разделе "Настройка сайта на Django и Apache+wsgi Denwer'а"

3. Теперь можно приступить к установке Django, для этого качаем последнюю версию (на момент написания статьи - версия 1,5,1) с официального сайта Django. После того, как скачали, выполним следующее:

3.1. Создаем папку, например, z:\home\custom\www\Django и копируем сюда скачанный и распакованный архив с папки Django-1.5.1.

3.2. Переходим в z:\home\custom\www\Django и выполняем команду

python.exe setup.py install
После выполнения команды должен появиться подкаталог build -

z:\home\custom\www\Django\build

4. Проверить установленную версию Django можно с помощью следующей команды:

python -c "import django; print(django.get_version())"
Для проверки работоспособности Django создадим проект под названием myproject. Проект можно создать в любой папке, но мы создадим проект с прицелом на будещее создание сайта. Заходим в z:\home и создаем папку mysite.com, а в ней www. Такое размещение проекта не рекомендуется, но для нас сойдет. Переходим в каталог z:\home\mysite.com\www и выполняем команду:

python z:\home\custom\www\Django\build\lib\django\bin\django-admin.py startproject myproject
Как вариант, можно скопировать файл z:\home\custom\www\Django\build\lib\django\bin\django-admin.py в папку z:\home\mysite.com\www. Тогда команда по созданию проекта будет значительно короче:

python startproject myproject
В результате выполнения создаёться подкаталог myproject -

z:\home\mysite.com\www\myproject следующей структуры:

myproject

manage.py

  • manage.py - утилита командной строки, которая позволяет вам взаимодействовать с этим проектом Django различными способами.
z:\home\custom\www\myproject\myproject содержит:
__init__.py

settings.py

urls.py 

wsgi.py 

  • __init__.py - пустой файл, который говорит Python, что этот каталог предназначен для Python-пакета.
  • settings.py - файл настроек и конфигурации для этого проекта Django. Глобальные настройки проекта. Здесь настраивается почти всё — пути, базы данных, подключенные приложения, middleware и т.д.
  • urls.py- файл с описанием URL для данного проекта Django. Именно он отвечает, за то, что по такому-то URL будет вызываться такой-то скрипт.
  • wsgi.py- файл необходим для подключения к wsgi-серверу, он содержит стандартный интерфейс для запуска конкретного приложения. WSGI приложение для взаимодействия с WEB-сервером

5. Создадим ещё и приложение (для начала работы этот пункт не обязательный). Заходим в каталог z:\home\mysite.com\www\myproject\myproject и выполняем команду:

python.exe ..\manage.py startapp core
в результате создается каталог:

z:\home\mysite.com\www\myproject\myproject\core следующего содержимого:

__init__.py

models.py 

tests.py

views.py

  • __init__.py - пустой файл, который говорит Python, что этот каталог предназначен для Python-пакета.
  • models.py - описание модели приложения, описываются классы.
  • tests.py- файл с с тестами.
  • views.py- описывается логика приложения.
На будущее можем создать папку templates для шаблонов будущего сайта:

z:\home\mysite.com\www\myproject\myproject\core\templates

6. Предварительно создаем базу данных, например, dj с помощью http://localhost/Tools/phpMyAdmin/ или, если используете, например, порт 8080, то http://localhost:8080/Tools/phpMyAdmin/. Создание базы данных можно выполнить и заблаговременно до установки Django. Для того, чтобы не было проблем в дальнейшем с кодировкой, при создании базы данных необходимо выбрать кодировку utf8_general_ci.

7. Настраиваем Django и проверяем его работоспособность:

7.1. Открываем в редакторе файл z:\home\custom\www\Django\build\lib\django\conf\global_settings.py и изменяем секцию "# Database connection info" следующим образом:

# Database connection info.

DATABASES = {

  DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2','postgresql','mysql','sqlite3' or 'ado_mssql'.

  DATABASE_NAME = 'dj' # база, созданная в phpMyAdmin

  DATABASE_USER = 'root' # пользователь по умолчанию в phpMyAdmin

  DATABASE_PASSWORD = '' # пароль по умолчанию отсутствует

  DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.

  DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.

}

Попутно можно отредактировать и другие секции, например, TIME_ZONE, LANGUAGE_CODE.

7.2. Редактируем секцию в файле нашего новосозданного проекта:

z:\home\mysite.com\www\myproject\myproject\settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.

'NAME': 'dj', # Or path to database file if using sqlite3.

# The following settings are not used with sqlite3:

'USER': 'root',

'PASSWORD': '',

'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.

'PORT': '', # Set to empty string for default.

}

}

Обратите внимание, что в 'PASSWORD': '' - это две одинарные кавычкм (два апострофа) - это означает, что пароль отсутствует. Можно отредактировать и другие секции, например, TEMPLATE_DIRS, INSTALLED_APPS.

7.3. Создадим все об'єкты базы данных. Для этого прейдём в каталог z:\home\mysite.com\www\myprosect и выполним команду:

python manage.py syncdb
Ответите на вопросы, касающиеся пользователя и администратора:

Creating tables ...

Creating table auth_permission

Creating table auth_group_permissions

Creating table auth_group

Creating table auth_user_groups

Creating table auth_user_user_permissions

Creating table auth_user

Creating table django_content_type

Creating table django_session

Creating table django_site

You just installed Django's auth system, which

rs defined.

Would you like to create one now? (yes/no):

Username (leave blank to use 'MyComputer'):

Email address:

Password:

Password (again):

Superuser created successfully.

Installing custom SQL ...

Installing indexes ...

Installed 0 object(s) from 0 fixture(s)

База данных инициализирована и создан суперпользователь. При любых изменениях в структуре базы данных необходимо выполнять эту команду.

7.4. Переходим в ранее созданный проект myprocect - в папку z:\home\mysite\www\myprocect и выполним команду запуска сервера:

python manage.py runserver

Сервер запустился (в дальнейшем будем называть испытательный сервер):

Validating models...

0 errors found

July 07, 2013 - 10:59:38

Django version 1.5.1, using settings 'first_cms.settings'

Development server is running at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

Если Вы хотите сменить порт сервера, то запустите команду с указанием другого порта, например, эта команда запустит сервер на порту 8080:

python manage.py runserver 8080

8. Проверим работоспособность Django. Для этого в строке ввода URL браузере наберем http://127.0.0.1:8000/ и откроется:

It worked!

Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Here's what

to do next:

  • If you plan to use a database, edit the DATABASES setting in myproject/settings.py .
  • Start your first app by running python manage.py startapp [appname] .

You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!

Если появилось подобное сообщение, то всё работает. Django работоспособен. Такой вариант рекомендуется для локальной разработки и отладки сайта и не рекомендуется в подобном виде переносить на хостинг.

Дочитав статью до этого места возникает вполне резонный вопрос: А зачем так необходим этот Demwer? или А причем здесь Denwer, если о нём пока почти ничего  не писалось?

Сразу отвечу, что до сих пор Denwer использовался только для хранения базы данных MySQL. А необходим Denwer для того, чтобы можно было посмотреть как выглядит спроектированный сайт в реальности без загрузки его на хостинг.

Для этого необходимо спроектировать хотя бы небольшой сайт, проектирование которого вынесено в отдельную статью Как создать сайт на Django для начинающих на Web-сервере Denwer.

Настройка сайта на Django и Apache+wsgi Denwer'а

Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях. Сделаем подключение по пунктам:

1. Качаем файл mod_wsgi.so  и копируем скачанный mod_wsgi-win32-ap22py27-3.3.so в папку z:\usr\local\apache\modules.

2. В файле z:\usr\local\apache\conf\httpd.conf после строк LoadModule добавляем LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so

3. Рестарт Denwer.

4. WSGI обработчик — это скрипт на языке Python, который вызывается Apache и который взаимодействует с приложением при обработке пользовательского запроса. Данный скрипт может располагаться где угодно на файловой системе, главное, чтобы Apache имел права на его запуск.

4.1. Теперь в корне проекта создаём файл .../mysite.com/www/django.wsgi:

import os

import sys

from site import addsitedir

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

sys.path.append('/home/mysite.com/www/myproject')

sys.path.append('/home/mysite.com/www')

addsitedir('/home/usr/local/Pithon/Lib/site-packages')

application = WSGIHandler()   

Обычно, файл django.wsgi (название условное - может быть и другим) размещают в папке cgi, находящейся .../mysite.com/cgi/django.wsgi. В таком случае с правами доступа вопросов не возникает.

4.2. Создаем файл .../mysite.com/www/.htaccess, но для того, чтобы не было подобного сообщения

Forbidden

У вас нет разрешения на доступ / django.wsgi / на этом сервере.

роявляющегося при размещении django.wsgi в корне папки www, необходимо в файл .htaccess (с точкой в начале) добавить строку Options +ExecCGI и получим слудующее содержимое файла .htaccess:

AddHandler wsgi-script .wsgi

Options +ExecCGI

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ django.wsgi/$1 [QSA,PT,L]

Вот и все настройки. На всякий случай, но не обязательно, делаем рестарт Denwer. Чтобы зайти на сайт в строке ввода URL браузера вводим http://mysite.com/ или, если Denwer работает на поруту 8080, http://mysite.com:8080/ Получим то, что запускали на испытательном сервере, но уже в таком виде, в каком будет видеть пользователь после размещения сайта на хостинге.

Чтобы запустить панель администратора, вводим http://mysite.com/admin/ или, если Denwer работает на поруту 8080, http://mysite.com:8080/admin/ Получили вход в админку. Конечно, менее красивая картинка, чем на испытательном сервере, но вполне работоспособна.

Вот и все премудрости. Всё должно работать, проверено. Далее надо работать над шаблоном и дизайном сайта.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us
Комментариев: 18
  1. Спасибо, благодаря вашей статье Django установился на Denwer без проблем.

  2. python z:\home\custom\www\Django\build\lib\django\bin\django-admin.py startproject myproject

    не понятно где это все писать в shell в cmd или где?

  3. Адиль,

    Ответ:

    cmd

    Это как пример. Если Вы пользуетесь, например, PyCharm или Eclipse, то создать проект намного проще.

  4. Алексей | 2013-09-26 в 22:29:23

    Статья хорошая, но хоть убей - не могу понять пункт:

    2,3, Добавляем в переменную среды Path в начало строки следующую запись: Z:\usr\local\python;Z:\usr\local\python\Scripts; Проверить потом можно командой set path...

    Это вообще где?

  5. Алексей,

    "Пуск"/"Компьютер" - правой кнопкой мышки выбрать "Свойства"

    Затем "Дополнительные параметры системы", закладка "Дополнительно",

    внизу кнопка "Параметры среды", окошко "Системные переменные", стать на Path и нажать кнопку "Изменить". Добавить то, что написано в п. 2.3. и нажать кнопку "Ок".

    set path запускается с командной строки, например, в окне по команде cmd

    Извините, но это уже элементарное знание работы на компьютере, тем более, если собираетесь заняться сайтостроением.

    Кажись очень кратко и очень подробно - дальше не куда excaim

  6. Алексей | 2013-09-30 в 20:37:54

    Спасибо за ответ. Разобрался.

    Одна проблема остаётся. Не подключаются CSS для админки. Я так понимаю, что проблема в настройках статики.

  7. Вячеслав | 2013-09-30 в 23:34:08

    после выполнения этой команды manage.py syncdb

    выдает line 34 ALLOWED_HOSTS = [] invalid syntax

    Почему

  8. Алексей, попробуйте выполнить

    python manage.py collectstatic

    соберет всю статику в STATIC_URL (прописано в settings.py),

    обычно,

    STATIC_URL = '/static/'

    если не поможет, надо смотреть остальные настройки

  9. Вячеслав, пропишите

    ALLOWED_HOSTS = ['*']

    Это будет как и раньше до версии 1.5.

  10. Вячеслав | 2013-10-01 в 07:55:32

    Не помогло - то же самое. На самом деле выдает много ошибок в таком стиле:

    traceback (most recent call last) и далее номер строки, в конце про инвалид синтакс.

    то же самое при запуске setting.py без параметров. Вроде бы вся установка прошла без запинок до этого момента строго по вашей инструкции. Сам питон вызывается и работает, базу создал пустую

  11. Вячеслав, как с Вами связаться: ICQ, Scype или E-Mail

    Вечером смогу связаться - необходимо уточнить что Вы делали, постараюсь помочь.

    Где-то упустили какую-то мелочь.

  12. Вячеслав | 2013-10-01 в 09:54:11

    darksly32 или почта sly32@tut.by

  13. Вячеслав | 2013-10-01 в 15:15:22

    разобрался - моя версия денвера позволяет создавать проект только по определенному адресу Z://localhost/www/имя_проекта.

    Проверьте пути, прописанные в статье - если им следовать можно много ошибок наделать, по крайней мере новичку как я.

    Теперь пошли ошибки при создании сайта, но это в другой статье буду обсуждать. Спасибо, ваша информация в любом случае самая точная и самая понятная из всего что есть в рунете на данный момент

  14. Алексей | 2013-10-01 в 20:05:18

    Если я еще не надоел, то спешу сообщить, что проблема с CSS для админки возникает на python 2.7 из-за ошибок с кодировкой в реестре. Вот статья для решения, если у кого такие же проблемы:

    http://django-tutorial.blogspot.ru/2013/02/django-admin-static-files.html

  15. 3.2. Переходим в z:\home\custom\www\Django и выполняем команду

    python.exe setup.py install

    Ввела в командой строке: python.exe setup.py install, а выводит: python.exe: can't open file 'setup.py':[Errno 2]Nosuch file or directory. И нет подкаталога build.

    Подскажите, где ошибка?

  16. Инна,

    если Вы выполнили требования п.2 с подпунктами, то должно всё получиться. Возможно Python установлен не в каталог z:\usr\local\Python

    Проверьте все подпункті п.2.

    Если всё выполнено и не работает - перегрузите компьютер.

    Будьте внимательны.

  17. Спасибо, очень полезная статья!

    Небольшой комментарий, который возможно пригодиться новичкам:

    пункт 2. Нужно чтобы по команде python -V не просто выводилась версия питона, а именно та, которая устанавливалась (в нашем случае 2.7). У меня, например, уже был установлен питон, поэтому команда python -V показывала старую версию. Эта версия не подходит и при установке джанго вылетит ошибка "SyntaxError: future feature unicode_literals is not defined". Решила удалением из Path путей "C:\Python25;C:\Python25\Scripts;".

    А по поводу ошибки Инны - скорее всего неправильно указывается путь до джанги. Например, архив распаковался в папку с другим названием, тогда надо переходить не в "z:\home\custom\www\Django", а в, например, "Z:\home\custom\www\Django\Django-1.5.4" соответственно.

  18. Ирина, все разобралась. Спасибо!!!

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация Loginza

(обязательно)