Возьми Python с собой
Думали ли вы (в очередной раз подготавливая среду для Python) о том, как было бы здорово, если бы не приходилось настраивать с нуля рабочее окружение (да ещё и под разными операционными системами), а можно было бы сесть и просто начать писать? Я случайно открыл для себя pythonanywhere.com — сервис, позволяющий вести разработку на Python онлайн, прямо в браузере. Под катом — описание сервиса с картинками и видео.
У меня сейчас настроены несколько Windows и Linux компьютеров, синхронизирован исходный код через Dropbox и заведён microinstance на Amazon EC2. Всё это заняло уйму времени и не очень удобно — бывает идею хочется проверить «в поле», и рядом нет настроенной с любовью среды. Что же предлагает PythonAnywhere?
Прежде чем читать длинное описание, предлагаю посмотреть видео, кратко рассказывающее о сервисе:
Также можно ознакомиться с выступлением разработчика Harry Percival на PyCon UK 2011 (хорошее знание английского приветствуется, но и без него можно многое понять из презентации):
В конце выступления Гарри не хватило времени и он вынужден был бегать по залу, чтобы у него не отобрали микрофон.
Программируем на Python в интернет
PythonAnywhere — это среда для разработки на Python непосредственно в браузере плюс хостинг для этих проектов. Если у вас есть браузер и доступ в интернет, то у вас есть всё, что нужно. Серверы уже настроены, на них имеется то что может понадобиться. Теперь легко взять с собой свою среду разработки — начните проект на рабочем компьютере, а потом продолжите с того места, где остановились, но уже на своём ноутбуке.
Владельцы айпадов торжествуют!
Теперь питоноводы могут писать приложения на iPad, с телефона или даже на «умном» телевизоре (smart TV) так же легко, как раньше делали это на своих компьютерах. PythonAnywhere работает на iPad и скоро будет готова версия для Android. Вы можете писать свои программы в веб-редакторе или запустить консольную сессию из-под любого современного браузера, поддерживающего HTML5. Уже не надо настраивать свой собственный сервер или платить за его настройку.
А что за кадром?
PythonAnywhere использует сервера Amazon (EC2), а мы можем использовать все преимущества этого подхода. Для быстрой разработки несложных приложений не понадобится платить ни копейки. А в случае мощных и ресурсоёмких задач — оплатим только использованные ресурсы.
Помимо того, имеется интеграция с DropBox, можно синхронизировать свои данные и код. При помощи командной строки легко работать с git, mercurial или subversion проектами на GitHub, Bitbucket и любом другом публичном репозитории.
Предлагаются версии Python 2.6, 2.7 и 3.2. Установлено очень много библиотек — NumPy, SciPy, Mechanize, BeautifulSoup, pycrypto и другие. Если этого набора недостаточно — имеются easy_install и pip, только используйте флаг —user, установка будет произведена в директорию .local в вашей домашней папке. Также добавлены virtualenv и virtualenvwrapper.
Поддерживается не только Django: Flask, Bottle, web2py — любой WSGI веб-фреймворк будет работать и скорее всего уже установлен (см. батарейки). В качестве баз данных можно использовать MySQL и SQLite, рассматривается возможность добавления MongoDB и PostgreSQL.
На наиболее дорогом (10 $/месяц, 2ГБ под файлы, SSH) тарифном плане можно хостить свой собственный домен, а на бесплатном тарифе дается субдомен вида your-username.pythonanywhere.com. Бесплатный тариф с минимальными ограничениями — доступно 500МБ дискового пространства, нет SSH.
Имеется аналог cron — можно запланировать запуск скриптов (не только Python) по расписанию.
Можно посмотреть логи доступа и ошибок веб-сервера.
Приступаем к работе
Регистрация не занимает много времени и сразу после подтверждения email-адреса можно начинать пользоваться сервисом.
Django версии 1.3.1. С помощью easy_install я без проблем смог проапгрейдить Django до текущего релиза 1.4:
easy_install --user --upgrade django
Создаём новый Django-проект — для этого идем на вкладку Web и нажимаем большую кнопку «New Django App»:
Для обычного Python проекта без веб-фреймворков просто создаём файл на вкладке Files и сразу попадаем в веб-редактор; после окончания редактирования готовый файл можно сохранить и тут же запустить на выполнение — откроется всплывающее окно с консолью, в которой будет выполняться наш скрипт.
Продолжим с Django — нам предлагают ввести имя проекта и папку для его хранения:
Мы можем использовать папку, предлагаемую по умолчанию или сохранить проект в DropBox.
Небольшие нюансы, связанные с DropBox:
1) Желательно, чтобы ваш email в PythonAnywhere совпадал с email-ом в DropBox — ведь мы расшарим папку с проектом для «dropbox@pythonanywhere.com» и он должен соотнести эту папку с вашим аккаунтом. Если email не совпадает — на вкладке Files справа вверху нажимаем ссылку «Connect to DropBox» и указываем наш email в DropBox. Нам покажут в картинках как в DropBox расшарить свою папку для этого сервиса.
2) Создать проект прямо в каталоге ~/Dropbox нельзя — придется пользоваться подкаталогом, примерно так: ~/Dropbox/PythonAnywhereProjects/myproject. Техподдержка намекает что это временное явление, мол сейчас идёт развитие сервиса и они пока ограничены в возможностях.
3) Нельзя просто удалить расшаренную папку из Dropbox — в таком случае она навсегда останется в PythonAnywhere и её не удастся удалить даже из консоли, т.к. на это у нас нет прав доступа. Поэтому предварительно на сайте DropBox-а уберите доступ к расшаренной папке для пользователя «dropbox@pythonanywhere.com». После этого папка исчезнет из PythonAnywhere и её можно будет спокойно удалить в DropBox.
Итак, я использовал синхронизацию с DropBox:
Дальше — создаём нужные файлы и редактируем их в веб-редакторе (или запускаем в bash-консоли vim/emacs). Если надо создать приложение в Django-проекте — используем bash-консоль:
./manage.py startapp myapp
Базу данных создаём на вкладке «MySQL», там же задаём пароль пользователя.
После того, как создали файлы — нужно перезагрузить веб-сервер. Для этого служит кнопка «Reload web app» на вкладке «Web».
Если хотите запускать несколько веб-приложений одновременно — техподдержка предлагает создать несколько аккаунтов с тем же email, в дальнейшем появится такая возможность на одном аккаунте.
Другие применения
Возможно вам нужно будет посоветоваться с коллегой — очень легко расшарить любую сессию. Для подключения вашему коллеге не нужно будет даже регистрироваться на сервисе — достаточно указать его email и он получит ссылку на текущую консольную сессию.
Быть может у вас есть блог о программировании с пошаговыми примерами — можно дать возможность читателям прямо на страницах блога тренироваться в программировании. Достаточно добавить этот код:
Каждый читатель получит свою собственную консоль, состояние которой будет сохраняться при переходе от страницы к странице.
Или вы ведете оффлайн-курс по программированию на Python. Прискорбно тратить первое занятие на ожидание, когда же все новички закончат настройку окружения под вашим руководством. Вместо этого можно предложить зарегистрироваться на PythonAnywhere и уже через несколько минут вплотную приступить к учебному процессу.
Не стоит зацикливаться на Python, ведь тут имеется и bash-консоль. Например, мы можем поддерживать постоянное SSH-соединение со сторонним хостом (обслуживаемый вами сервер и т.п.). Тогда если нам вдруг понадобится срочно подключиться, а мы будем например в гостях — достаточно будет браузера, консоль ждет нас в том состоянии, в каком мы её оставили.
Ещё это хорошая альтернатива Google App Engine (а может даже и некоторым платным Python хостингам). Уверен, вы сможете придумать и другие варианты.
- Python
- Программирование
Публикация в Интернете!
Примечание: Эта глава может показаться сложной. Будь упорна, развертывание сайта на сервере является важной частью веб-разработки. Данная глава намеренно расположена в середине учебника для того, чтобы твой наставник смог помочь с таким мудреным процессом, как публикация сайта. Так ты сможешь самостоятельно закончить все главы, даже если время будет поджимать.
До настоящего момента твой сайт был доступен только для локального просмотра, теперь же ты узнаешь, как развернуть его на удалённом сервере! Развертывание (deploy) — это процесс публикации приложения в интернете, чтобы люди могли наконец увидеть твое творение 🙂
Как ты уже знаешь, веб-сайт должен располагаться на сервере. Есть много компаний, предоставляющих сервера в интернете. Мы воспользуемся услугами одной из них, с довольно простым процессом публикации: PythonAnywhere. PythonAnywhere бесплатен для маленьких приложений с небольшим числом посетителей, и этого будет для нас более чем достаточно.
Другим внешним сервисом, которым мы воспользуемся, будет GitHub — сервис хостинга кода. Существуют и другие похожие сервисы, но практически у каждого программиста есть GitHub аккаунт, теперь будет и у тебя!
В итоге твой код будет в трёх местах. На локальном компьютере ты будешь заниматься разработкой и тестированием. Когда результат тебя устроит, ты загрузишь свою программу на GitHub. А твой сайт будет на PythonAnywhere, и ты сможешь обновлять его, просто загружая новую версию кода с GitHub.
Примечание: если ты уже выполнила установку, незачем повторять её вновь — можешь сразу переходить к следующему разделу и начать создание собственного Git-репозитория.
Git — это «система управления версиями», используемая множеством программистов. Эта программа отслеживает изменения, происходящие с файлами, чтобы впоследствии можно было восстановить состояние кода на нужный момент времени. Это немного похоже на функцию отслеживания изменений в Microsoft Word, но куда мощнее.
Установка Git
Windows
Ты можешь загрузить Git с официального сайта git-scm.com. Ты можешь нажимать «дальше, дальше, дальше» на всех этапах установки за исключением одного: на пятом шаге, который называется «Adjusting your PATH environment» (Настройка системной переменной Path), выбери «Use Git and optional Unix tools from the Windows Command Prompt» (Запуск Git и соответствующих Unix утилит через командную строку Windows, нижняя опция). Все остальные настройки можно оставить по умолчанию. Также неплохо будет выбрать опцию «Checkout Windows-style, commit Unix-style line endings».
После окончания установки не забудь перезапустить командную строку или PowerShell.
Загрузи Git с официального сайта git-scm.com и просто следуй инструкциям по установке.
Примечание: если ты используешь OS X 10.6, 10.7 или 10.8, тебе придётся установить git отсюда: Установка Git для OS X Snow Leopard
Debian и Ubuntu
$ sudo apt install git
Fedora
$ sudo dnf install git
openSUSE
$ sudo zypper install git
Создаём Git-репозиторий
Git отслеживает изменения определенного набора файлов, который называется репозиторием (сокращенно «репо»). Давайте создадим такой для нашего проекта. Открой консоль и запусти эти команды в папке djangogirls :
Примечание: проверь текущий рабочий каталог с помощью команд pwd (OSX/Linux) или cd (Windows) перед инициализацией нового репозитория. Ты должна находиться в директории djangogirls .
$ git init Initialized empty Git repository in ~/djangogirls/.git/ $ git config --global user.name "Your Name" $ git config --global user.email you@example.com
Инициализировать git-репозиторий придется только один раз за проект (и тебе больше не придется вводить имя пользователя и адрес электронной почты).
Git будет отслеживать изменения всех файлов и каталогов в заданной директории, однако некоторые из них мы предпочли бы игнорировать. Для этого нам нужно создать файл .gitignore в корневом каталоге репозитория. Открой редактор и создай новый файл со следующим содержанием:
*.pyc *~ __pycache__ myvenv db.sqlite3 /static .DS_Store
И сохрани его как .gitignore в корневом каталоге «djangogirls».
Примечание: точка в начале имени файла имеет важное значение! Если у тебя есть проблемы с созданием таких файлов (Mac не позволит создать файл с названием, начинающимся с точки, через Finder, например), тогда используй кнопку «Сохранить как» в меню своего редактора кода, это точно поможет.
Примечание: среди файлов, которые мы перечислили в .gitignore , есть db.sqlite3 . Этот файл содержит твою локальную базу данных, где будут храниться твои посты. Мы не добавляем его в репозиторий, поскольку твой сайт на PythonAnywhere будет использовать другую базу данных. Эта база данных тоже может быть SQLite, как на твоём рабочем компьютере, но обычно используется MySQL, которая может справиться с большим количеством посетителей, чем SQLite. В любом случае, поскольку мы не копируем базу данных SQLite на GitHub, все посты, которые ты уже создала, будут доступны только на твоём локальном компьютере, и тебе придётся заново создать их на опубликованном сайте. Рассматривай свою локальную базу данных как удобную игровую площадку, где ты можешь тестировать различные идеи и не бояться удалить настоящий пост из своего блога.
Используй команду git status перед git add или в любой другой момент, когда ты не уверена, что изменения — хорошая идея. Это убережёт тебя от таких неприятных сюрпризов, как добавление неправильных файлов. Команда git status возвращает информацию обо всех ранее неотслеживаемых/изменённых/добавленных в git файлах, а также статус ветки и многое другое. Результат должен быть похож на:
$ git status On branch master No commits yet Untracked files: (use "git add . " to include in what will be committed) .gitignore blog/ manage.py mysite/ nothing added to commit but untracked files present (use "git add" to track)
И, наконец, мы сохраним наши изменения. Переключись на консоль и набери:
$ git add --all . $ git commit -m "My Django Girls app, first commit" [. ] 13 files changed, 200 insertions(+) create mode 100644 .gitignore [. ] create mode 100644 mysite/wsgi.py
Загружаем код в репозиторий GitHub
Зайди на GitHub.com и создай новую бесплатную учётную запись (если это уже сделано во время подготовки к воркшопу — здорово!). Убедись, что запомнила свой пароль (добавь его в свой менеджер паролей, если им пользуешься).
Затем создай новый репозиторий и назови его «my-first-blog». Не выбирай опцию «initialise with a README», не создавай файл .gitignore (мы уже сделали это сами) и оставь лицензию None.
Примечание: имя репозитория my-first-blog для нас очень важно — ты можешь, конечно, придумать другое название, но оно будет встречаться множество раз в руководстве, и тебе придется заменять его каждый раз на своё. Будет проще для начала остановиться на нашем варианте: my-first-blog .
На следующем экране ты найдёшь URL для клонирования репозитория. Выбери вариант «HTTPS» и скопируй ссылку:
Теперь нужно связать локальный репозиторий с репозиторием на GitHub.
Напечатай у себя в консоли следующую команду (замени на имя, указанное при создании аккаунта на GitHub, но без угловых скобок):
$ git remote add origin https://github.com//my-first-blog.git $ git push -u origin master
Введи свое имя пользователя и пароль от аккаунта GitHub; ты должна увидеть что-то такое:
Username for 'https://github.com': hjwp Password for 'https://hjwp@github.com': Counting objects: 6, done. Writing objects: 100% (6/6), 200 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/hjwp/my-first-blog.git * [new branch] master -> master Branch master set up to track remote branch master from origin.
Твой код теперь на GitHub. Зайди на сайт и проверь! Ты найдешь его в хорошей компании: фреймворк Django, этот учебник, а также многие другие великолепные проекты с исходным кодом размещены на GitHub 🙂
Настройка блога на PythonAnywhere
Регистрация на PythonAnywhere
Примечание: возможно, ты уже завела учётную запись на PythonAnywhere ранее — если так, нет нужды повторять это вновь.
PythonAnywhere — это сервис по запуску кода на Python в облаке. Мы будем использовать его, чтобы разместить наш сайт «вживую» в интернете.
Создай аккаунт уровня «Beginner» на PythonAnywhere. Он бесплатный, так что кредитка не понадобится.
- www.pythonanywhere.com
Примечание: при выборе имени пользователя помни, что URL блога примет вид yourusername.pythonanywhere.com , так что остановись либо на своём нике, либо на имени, связанном с тематикой блога. Кроме того, убедись в том, что запомнила пароль (сохрани его в своём менеджере паролей, если им пользуешься).
Создание API токена для PythonAnywhere
Это нужно будет сделать только один раз. Когда ты зарегистрируешься на PythonAnywhere, откроется панель управления (dashboard). На ней в правом верхнем углу будет ссылка на страницу «Account»:
Там выбери вкладку «API token» и нажми кнопку, на которой написано «Create new API token» (создать новый API token).
Настройка сайта на PythonAnywhere
Вернись на главную страницу PythonAnywhere, кликнув логотип. Затем запусти Bash-консоль. Нажав на кнопку bash ты запускаешь командную строку, которая находится на серверах PythonAnywhere. Эта командная строка аналогична той, что есть на твоём собственном компьютере.
Примечание: PythonAnywhere использует Linux, так что если ты используешь Windows, то терминал и команды могут немного отличаться от того, к чему ты привыкла на своём компьютере.
Чтобы опубликовать сайт на PythonAnywhere, нужно загрузить на PythonAnywhere твой код с Github и затем настроить PythonAnywhere так, чтобы он распознал твой код и запустил твоё веб-приложение. Существуют способы сделать это «вручную», но для PythonAnywhere есть программа-помощник, которая сделает это для тебя. Давай её установим.
$ pip3.6 install --user pythonanywhere
Когда ты это запустишь, в консоли будет печататься лог установки. Он начнётся с чего-то вроде Collecting pythonanywhere , а последней будет строчка Successfully installed (. ) pythonanywhere- (. ) .
Теперь запустим эту вспомогательную утилиту, которую ты только что установила. Она настроит твоё приложение, скачав его код с GitHub. Напечатай следующее в консоли PythonAnywhere (не забудь использовать свой ник на GitHub вместо , URL в консольной команде должен совпадать с URL, используемым в команде clone):
$ pa_autoconfigure_django.py https://github.com//my-first-blog.git
Утилита будет печатать в консоль, что она делает:
- Скачивает твой код с GitHub
- Создаёт виртуальное окружение на PythonAnywhere, такое же, как на твоём компьютере
- Обновляет твой файл настроек с настройками деплоя
- Создаёт базу данных на PythonAnywhere, используя команду manage.py migrate
- Разбирается с твоими статическими файлами (о них будет дальше)
- Настраивает PythonAnywhere так, чтобы твоё приложение было доступно в интернете
Все эти шаги автоматизированы на PythonAnywhere, но они совершенно такие же, какие надо было бы совершить с любым другим хостинговым сервисом.
Главное, на что нужно обратить внимание сейчас, — это то, что твоя база данных на PythonAnywhere никак не связана с базой данных на твоём компьютере. Поэтому там будут разные посты и разные аккаунты администраторов. Как следствие, для базы на PythonAnywhere необходимо создать аккаунт администратора так же, как ты это делала у себя локально с помощью команды createsuperuser . На PythonAnywhere заранее активировано виртуальное окружение, так что всё, что тебе нужно сделать — это запустить в консоли PythonAnywhere команду:
(ola.pythonanywhere.com) $ python manage.py createsuperuser
Введи параметры для своего пользователя-админа. Лучше всего использовать те же самые данные, что и у тебя на локальном компьютере, чтобы избежать путаницы, если ты конечно не хочешь сделать пароль на сервере PythonAnywhere более надёжным.
Сейчас, если хочешь, посмотри на файлы на PythonAnywhere с помощью команды ls :
(ola.pythonanywhere.com) $ ls blog db.sqlite3 manage.py mysite requirements.txt static (ola.pythonanywhere.com) $ ls blog/ __init__.py __pycache__ admin.py apps.py migrations models.py tests.py views.py
Ты также можешь заглянуть на страницу «Files» и посмотреть, что лежит на сервере, используя встроенный в PythonAnywhere файловый менеджер. (Со страницы «Console» ты можешь попасть на другие страницы PythonAnywhere, используя кнопку меню в правом верхнем углу. Находясь на какой-либо странице, ты можешь найти ссылки на другие вверху.)
Ты в сети!
Ура, твой сайт теперь доступен всем в интернете! Ты можешь найти ссылку на него на странице «Web» на PythonAnywhere. Этой ссылкой можно делиться с кем хочешь 🙂
Примечание Это туториал для начинающих, поэтому публикуя сайт, мы использовали несколько хаков, которые не очень хороши с точки зрения безопасности. Если ты захочешь сделать что-то на основе этого проекта или начать новый, прочитай Django deployment checklist для советов по безопасности на твоём сайте.
Советы по отладке
Если ты столкнулась с ошибкой, запуская скрипт pa_autoconfigure_django.py , вот несколько частых причин:
- Ты забыла создать PythonAnywhere API токен
- Ошибка в GitHub URL
- Если ты видишь сообщение «Could not find your settings.py» (невозможно найти settings.py), это может быть вызвано тем, что ты не добавила все файлы в Git или не загрузила их на GitHub. Перечитай Git-секцию выше
- Если ты до этого уже регистрировала аккаунт на PythonAnywhere и наткнулась на ошибку collectstatic, вполне вероятно, что у тебя устаревшая версия SQLite (например, 3.8.2). В этом случае зарегистрируй новый аккаунт и попробуй ещё раз ввести команды, упомянутые в разделе Настройка блога на PythonAnywhere.
Если ты столкнулась с ошибкой при попытке открыть свой сайт, первое место, где нужно искать отладочную информацию — твой error log. Ты найдёшь ссылку на него на странице «Web» на PythonAnywhere. Глянь, есть ли там какие-либо сообщения об ошибках; самые новые находятся внизу.
И помни, твой тренер здесь, чтобы помочь!
Ты в сети!
Стандартная страница твоего сайта должна включать приветствие «It worked!», точно так же как было на локальном компьютере. Попробуй добавить /admin/ к концу адреса сайта, и перейдёшь к панели администратора сайта. Войди под своим именем и паролем и увидишь форму для добавления новых записей в блог.
После того, как создашь несколько записей, ты можешь вернуться к своей локальной версии приложения (а не на PythonAnywhere). С этого момента для внесения изменений тебе нужно работать в своей локальной версии. Это обычный подход в веб-программировании: изменять код локально, загружать изменения на GitHub, а затем подтягивать изменения на сервер с сайтом. Такой подход позволяет тебе работать и экспериментировать, не рискуя сломать свой сайт. Круто, правда?
Ты заслужила огромную похвалу! Развёртывание сервера — одна из самых каверзных частей веб-разработки, и нередко уходит несколько дней, прежде чем заставишь всё работать. А у нас уже есть работающий в сети веб-сайт, вот так вот!
results matching » «
No results matching » «
Django на PythonAnywhere
Развёртывание django-сайта на хостинге PythonAnywhere — довольно простая, но комплексная задача. Для её решения обычно выполняется следующая последовательность действий.
Создание окружения VirtualEnv
Для этого нужно войти на https://www.pythonanywhere.com/ под своим именем, перейти в раздел Consoles и открыть консоль Bash.
Обратите внимание, что PythonAnywhere ограничивает число одновременно открытых консолей. Список уже открытых консолей показан в разделе Consoles под надписью Your Consoles. Вы можете выполнять действия в уже имеющейся консоли (для этого щёлкните по её названию), либо закрыть консоль, щёлкнув на Kill возле неё.
В консоли нужно выполнить следующие команды. Здесь и далее предполагается, что ваш проект называется my_project. Замените слово my_project на название вашего проекта.
cd ~ virtualenv -p /usr/bin/python3.5 my_project_env cd my_project_env source bin/activate
С этого момента вы находитесь в вашем рабочем окружении. Чтобы деактивировать его, выйдите из консоли командой exit , либо, чтобы продолжить работу в этой консоли, деактивируйте его командой deactivate . Этого сейчас делать не нужно! Не убивайте эту консоль, она нам ещё не раз понадобится. Однако выходить из неё (щелком по логотипу PythonAnywhere слева вверху) и возвращаться обратно можно сколько угодно раз — состояние консоли сохраняется.
Установка необходимых пакетов
Находясь в консоли с активным окружением, выполните следующие команды.
pip install Pillow pip install Django
Если вам требуется конкретная версия Django (например, 1.8, или 1.7), её можно установить следующей командой:
pip install Django==1.7
Вместо 1.7 укажите желаемую версию.
Аналогично установите другие желаемые пакеты (например, Requests, или BeautifulSoup4, или любые другие).
Подготовка проекта к развёртыванию
Если вы хотите перенести проект в том виде, в котором он содержится у вас, с базой данных и загруженными во время отладки файлами, то почти ничего делать не требуется. Однако часто нужно развернуть чистый проект.
Для этого скопируйте ваш проект целиком в отдельный каталог. Затем удалите из вашего MEDIA_ROOT загруженные файлы, если они есть, а так же удалите файл базы данных, если вы использовали SQLite (файл db.sqlite3).
Упакуйте каталог проекта в zip-архив любым способом. Допустим, файл архива будет называться my_project.zip.
Загрузка проекта на сервер
На странице PythonAnywhere перейдите в раздел Files (для этого, находясь в консоли, щёлкните по логотипу сайта слева вверху и щёлкните ссылку Files).
Не используйте команду exit — это закроет консоль, а она нам ещё понадобится.
Перейдите в каталог вашего виртуального окружения (my_project_env) и щёлкните ссылку Upload a file. Выберите архив проекта и дождитесь, пока он будет загружен.
Перейдите в раздел Consoles, активируйте вашу консоль, в ней выполните следующую команду.
unzip my_project.zip
Дождитесь завершения распаковки.
Перейдите в распакованный каталог проекта с помощью команды cd (в нём должен быть файл manage.py , проверить список файлов в каталоге можно командой ls ).
Создание базы данных
Перейдите в раздел Databases (щёлкните логотип PythonAnywhere, затем раздел Databases). Слева выберите MySQL. Найдите на странице секцию Create a database. В поле Database name введите название вашей новой базы данных. Например, my_project . Нажмите кнопку Create. Полное название вашей базы данных будет состоять из вашего логина на PythonAnywhere и указанного вами названия, разделённых символом $ . Например, если ваш логин — ivan , то созданная база данных будет называться ivan$my_project . Именно это название нужно будет указать в настройках вашего проекта.
Теперь нужно создать пароль для доступа к базе данных. В секции MySQL Password ниже введите пароль в поля New password и Confirm password, после чего щёлкните кнопку Set MySQL Password ниже. Желательно, чтобы пароль базы данных отличался от вашего пароля на PythonAnywhere. Запомните или запишите созданный пароль. Его так же надо будет указать в настройках проекта.
Удаление базы данных (если нужно)
Чтобы удалить базу данных (например, ошибочно созданную) со всеми данными, хранящимися в ней, откройте консоль MySQL и введите команду:
drop database user$dbname;
Здесь user — имя вашей учётной записи, а dbname — название базы данных, указанное при её создании. Точка с запятой в конце команды обязательна. Например, если ваш логин — ivan, а база данных, которую вы хотите удалить, назвается my_project, команда удаления будет выглядеть так:
drop database ivan$my_project;
Выйти из консоли MySQL можно командой exit .
Настройка проекта
На странице PythonAnywhere перейдите в раздел Files, и откройте там каталог my_project_env , в нём — каталог my_project , а в нём — снова каталог my_project . Вы увидите ваш файл settings.py . Щёлкните по нему. Откроется текстовый редактор с этим файлом.
Внесите в него следующие изменения.
DEBUG
Обязательно измените значение параметра DEBUG на False :
DEBUG = False
ALLOWED_HOSTS
В список ALLOWED_HOSTS добавьте полное доменное имя вашего сайта. Оно состоит из вашего логина на PythonAnywhere и строчки «pythonanywhere.com». Например, если ваш логин — ivan , то полное доменное имя вашего сайта — ivan.pythonanywhere.com . Если этого не сделать, Django не будет работать с флагом DEBUG = False . Вообще, этот список содержит список доменных имён, по которым должен быть доступен ваш сайт.
ALLOWED_HOSTS = ["ivan.pythonanywhere.com", ]
DATABASES
Укажите параметры подключения к созданной вами базе данных. Их можно посмотреть в разделе Databases сайта PythonAnywhere. Ниже — пример настроек для пользователя ivan , базы данных ivan$my_project и пароля seCrEt123 .
DATABASES = < 'default': < 'ENGINE': 'django.db.backends.mysql', 'NAME': 'ivan$my_project', 'USER': 'ivan', 'PASSWORD': 'seCrEt123', 'HOST': 'ivan.mysql.pythonanywhere-services.com', >>
Замените везде ivan на ваш логин, my_project — на имя вашей базы, а seCrEt123 — на пароль от неё. Остальные настройки можно оставить без изменений.
Подготовка базы данных
Откройте в разделе Consoles вашу консоль Bash. Если вы вышли из неё, активируйте ваше рабочее окружение следующими командами:
cd ~/my_project_env source bin/activate
Теперь перейдите в каталог проекта:
cd my_project
И примените миграции базы данных:
python manage.py makemigrations python manage.py migrate
Если появятся сообщения об ошибках, убедитесь, что в файле settings.py указаны правильные параметры подключения базы данных.
Настройка веб-сервера PythonAnywhere
На сайте PythonAnywhere перейдите в раздел Web.
Важный момент: на бесплатном тарифе PythonAnywhere не позволяет иметь более одного приложения одновременно. Если у вас уже есть развёрнутое приложение, удалите его. Для этого в самом низу страницы щёлкните кнопку «Delete ваш-логин.pythonanywhere.com» и подтвердите дейставие, нажав кнопку Yes.
Слева щёлкните кнопку Add a new web app. Появится мастер добавления нового веб-приложения. Смена доменного имени доступна только на платном тарифе, поэтому щёлкаем Next. В окне «Select a Python Web framework» выбираем Manual configuration, затем выбираем последнюю доступную версию Python (Python 3.5). Щёлкаем Next. Ждём, пока приложение будет создано.
На странице «Configuration for ваш-логин.pythonanywhere.com» заполняем поля конфигурации сайта.
В секции Code для параметра Source code указываем путь до нашего проекта: /home/ваш-логин/my_project_env/my_project . После ввода значения нужно щёлкнуть небольшую кнопку с галочкой для сохранения введённого значения. Для параметра Working directory указываем тот же путь.
Ниже в секции Virtualenv указываем путь до виртуального окружения нашего проекта: /home/ваш-логин/my_project_env .
Теперь в секции Code щёлкаем параметр WSGI configuration file.
Откроется текстовый редактор. Удаляем всё содержимое файла и копируем туда содержимое WSGI-файла нашего проекта. Его можно найти в каталоге проекта рядом с файлом settigs.py . Он называется wsgi.py . Обычно что-то вроде такого должно получиться:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") application = get_wsgi_application()
Допишем туда путь к нашему проекту, чтобы Питон смог загрузить наши модули. Должно получиться вот так:
import os, sys path = '/home/ваш-логин/my_project_env/my_project' if path not in sys.path: sys.path.append(path) from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") application = get_wsgi_application()
Конечно, везде заменяем my_project на название каталога с вашим проектом, а символы «ваш-логин» на ваш логин.
Сохраним файл (кнопка Save справа вверху) и выйдем из редактора (щёлкнем по логотипу сайта PythonAnywhere слева вверху).
Вернёмся к разделу Web, щёлкнув по нему.
Теперь на странице «Configuration for ваш-логин.pythonanywhere.com» нужно нажать зелёную кнопку «Reload ваш-логин.pythonanywhere.com» и дождаться завершения перезапуска. После этого откроем новую вкладку браузера и введём адрес http://ваш-логин.pythonanywhere.com.
Если возникли ошибки, проверьте, всё ли правильно заполнено. Убедитесь, что верно указаны пути к проекту в разделе Web, что содержимое WSGI-файла верно. Если источник ошибок непонятен, попробуйте открыть файл settings.py и изменить значение параметра DEBUG на True . Возможно, отладочный вывод Django поможет вам. Помните, что после каждого изменения нужно перезапускать приложение кнопкой Reload в секции Web. Не забудьте вернуть значение DEBUG = False после устранения всех проблем.
Настройка статических файлов
Чтобы указать, где находятся статические файлы вашего проекта, нужно перейти на сайте PythonAnywhere в раздел Web и найти там секцию Static files. Там находится таблица соответствий адресов статических файлов их реальному положению на диске сервера.
Например, если в нашем проекте статические файлы собраны в каталог my_project/static/ , и мы в шаблонах страниц обращаемся к ним по адресу /static/ , нужно добавить это соответствие.
Для этого нужно щёлкнуть ссылку Enter URL, ввести туда /static , щёлкнуть кнопку с галочкой, потом щёлкнуть Enter path, ввести туда /home/ваш-логин/my_project_env/my_project/static и вновь щёлкнуть кнопку с галочкой.
Обновление проекта
Удобнее всю разработку вести на своём компьютере с использованием встроенного сервера Django ( python manage.py runserver ).
После того, как вы внесли изменения и проверили всё, нужно загрузить изменённые файлы на сервер PythonAnywhere (используя раздел Files), заменяя старые файлы новыми. Это ещё называют «деплой на боевой сервер». Будьте осторожны! Не заменяйте файл settings.py , ведь параметры в нём отличаются от параметров на вашем компьютере. Изменения в него лучше вносить вручную, модифицируя его в разделе Files.
Чтобы применить миграции БД, следует открыть консоль Bash, перейти в каталог вашего проекта и выполнить обычные команды.
python manage.py makemigrations python manage.py migrate
После того, как заменены все старые файлы и применены миграции, нужно перезапустить приложение (раздел Web, кнопка Reload).
Если что-то не работает, попробуйте включить отладку (изменив в файле settings.py значение параметра DEBUG = True ). После устранения проблем не забудьте отключить её ( DEBUG = False ). После любого изменения settings.py (как и после любого изменения любого python- файла) нужно перезапускать приложение.
Использованы значки из шрифта Entypo с сервиса Fontello.