Изучаем Python Эрик Метиз. Crash course2 n d e d i t i o na h a n d s o n, p r o j e c t b a s e d i n t r o d u c t i o n t o p r o g r a m m i n g
Скачать 6.19 Mb.
|
The item you requested is not available. (404){% endblock page_header %} Этот простой шаблон предоставляет ту же информацию, что и обобщенная стра- ница ошибки 404, но его оформление соответствует остальным страницам сайта. Создайте другой файл с именем 500 .html : 500.html {% extends "learning_logs/base.html" %} {% block page_header %} There has been an internal error. (500){% endblock page_header %} 478 Глава 20 • Оформление и развертывание приложения Новые файлы потребуют небольших изменений в settings .py settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, }, ] Это изменение приказывает Django искать шаблоны страниц ошибок в корневом каталоге шаблонов. Локальный просмотр страниц ошибок Если вы хотите посмотреть, как будут выглядеть страницы ошибок, в своей системе перед отправкой на сервер Heroku, вам сначала придется установить в локальных настройках режим Debug=False , чтобы подавить выдачу отладочных страниц Django по умолчанию. Для этого внесите следующие изменения в settings .py (убедитесь в том, что вы работаете в части settings .py , относящейся к локальной среде, а не той, которая относится к Heroku): settings.py # SECURITY WARNING: не включайте при реальной эксплуатации приложения! DEBUG = False Запросите тему или запись, которая вам не принадлежит, чтобы увидеть страни- цу ошибки 404. Затем запросите несуществующий URL-адрес (например, http:// localhost:8000/topics/999/ ), чтобы увидеть страницу ошибки 500 (если вы еще не успели сгенерировать 999 тем). Завершив проверку, верните DEBUG локальное значение True , чтобы продолжить разработку Learning Log. (Проследите за тем, чтобы режим работы с DEBUG не из- менялся в разделе, относящемся к развертыванию в среде Heroku.) ПРИМЕЧАНИЕ Страница ошибки 500 не содержит никакой информации о текущем пользователе, потому что Django не включает контекстную информацию в ответ при возникновении ошибки сервера . Отправка изменений на Heroku Теперь необходимо закрепить изменения в шаблоне и отправить их на Heroku: Развертывание Learning Log 479 ❶ (ll_env)learning_log$ git add . ❷ (ll_env)learning_log$ git commit -am "Added custom 404 and 500 error pages." 3 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 learning_log/templates/404.html create mode 100644 learning_log/templates/500.html ❸ (ll_env)learning_log$ git push heroku master remote: Verifying deploy.... done. To https://git.heroku.com/learning-log.git d5075a1..4bd3b1c master -> master (ll_env)learning_log$ В точке выдается команда git add , потому что в проекте были созданы новые файлы и теперь нужно приказать Git начать отслеживание этих файлов. Затем мы закрепляем изменения и отправляем обновленный проект на Heroku. Теперь страницы ошибок имеют такое же оформление, как и остальные страницы сайта, а приложение выглядит более профессионально при возникновении ошибок. Использование метода get_object_or_404() На данный момент если пользователь вручную запрашивает несуществующую тему или запись, он получает ошибку сервера 500. Django пытается отобразить страницу, но не располагает достаточной информацией для этого, что приводит к ошибке 500. Такая ситуация более точно обрабатывается как ошибка 404, и это поведение можно реализовать при помощи вспомогательной функции Django get_object_or_404() Эта функция пытается получить запрошенный объект из базы данных, а если этот объект не существует — инициирует исключение 404. Мы импортируем эту функ- цию в views .py и используем ее вместо get() : views.py from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.decorators import login_required @login_required def topic(request, topic_id): """Выводит одну тему и все ее записи.""" topic = get_object_or_404(Topic, id=topic_id) # Проверка того, что тема принадлежит текущему пользователю. Теперь при запросе несуществующей темы (например, http://localhost:8000/ topics/999/ ) появляется страница ошибки 404. Чтобы развернуть это изменение, выполните закрепление и отправьте проект на Heroku. Текущая разработка Возможно, вы захотите продолжить разработку Learning Log после исходной от- правки данных на сервер или создать и развернуть собственные проекты. Суще- ствует достаточно четко определенный процесс обновления проектов. 480 Глава 20 • Оформление и развертывание приложения Сначала все необходимые изменения вносятся в локальный проект. Если измене- ния приводят к появлению новых файлов, добавьте эти файлы в репозиторий Git командой git add (не забудьте точку в конце команды). Эта команда необходима для любого изменения, требующего миграции базы данных, потому что для каждой миграции генерируется новый файл миграции. Затем закрепите изменения в репозитории командой git commit -am " сообщение " Отправьте изменения на Heroku командой git push heroku master . Если вы провели локальную миграцию базы данных, также необходимо провести миграцию и для базы данных развернутого приложения. Либо используйте одноразовую команду heroku run python manage.py migrate , либо откройте удаленный терминальный сеанс командой heroku run bash и выполните команду python manage.py migrate . Затем посетите свой проект и убедитесь в том, что предполагаемые изменения вступили в силу. В этом процессе легко допустить ошибку, так что не удивляйтесь, если что-то пойдет не так. Если код не работает, проанализируйте то, что было сделано, и по- пробуйте найти ошибку. Если найти ошибку не удается или вы не можете понять, как ее отменить, обращайтесь к рекомендациям в приложении В. Не стесняйтесь обращаться за помощью: все остальные учились строить проекты и задавали те же вопросы, которые возникнут и у вас, так что вы наверняка найдете кого-нибудь, кто согласится помочь. Решение всех возникающих проблем поможет развивать ваши навыки до того момента, когда вы начнете строить содержательные, надежные проекты и начнете отвечать на вопросы других людей. Параметр SECRET_KEY Django использует значение настройки SECRET_KEY из файла settings .py для реали- зации некоторых протоколов безопасности. В нашем проекте файл настроек был закреплен с включением настройки SECRET_KEY . Для учебного проекта этого до- статочно, но на реальном сайте с настройкой SECRET_KEY следует действовать более осторожно. Если вы строите проект, предназначенный для реальной эксплуатации, обязательно изучите вопрос, как повысить безопасность настройки SECRET_KEY Удаление проекта с Heroku Очень полезно многократно отработать процесс развертывания на одном про- екте или серии малых проектов, чтобы получить представление о развертывании. Однако вы должны знать, как удалить проект после развертывания. Heroku также может ограничивать количество бесплатно развернутых проектов, и загромождать учетную запись учебными проектами нежелательно. Войдите на веб-сайт Heroku ( https://heroku .com/ ), и вы будете перенаправлены на страницу со списком проектов. Щелкните на проекте, который нужно удалить; от- крывается новая страница с информацией о проекте. Щелкните на ссылке Settings , прокрутите список и найдите ссылку для удаления проекта. Отменить удаление Итоги 481 не удастся, поэтому Heroku предложит подтвердить удаление, для чего вам нужно будет вручную ввести имя проекта. Если вы предпочитаете работать в терминальном режиме, проект также можно удалить командой destroy : (ll_env)learning_log$ heroku apps:destroy --app имя_приложения Здесь имя_приложения — имя вашего проекта (например, secret-lowlands-82594 или learning-log , если проект был переименован). Вам также будет предложено снова ввести имя проекта, чтобы подтвердить удаление. ПРИМЕЧАНИЕ При удалении проекта на Heroku с локальной версией проекта ничего не происходит . Если никто не использовал ваш развернутый проект и вы просто отра- батываете процесс развертывания, ничто не мешает вам удалить свой проект на Heroku и развернуть его заново . УПРАЖНЕНИЯ 20.3. Блог в интернете: разверните проект Blog, над которым вы работали ранее, на сервере Heroku. Проследите за тем, чтобы переменная DEBUG имела значение False и пользователи не видели полную страницу ошибки Django при возникновении каких-либо проблем. 20.4. Больше 404: функцию get_object_or_404() также следует применять в представлени- ях new_entry() и edit_entry() . Внесите изменения, протестируйте их на URL-адресе вида http://localhost:8000/new_entry/999/ и убедитесь в том, что при этом выводится ошибка 404. 20.5. Расширенное приложение Learning Log: добавьте простую функцию в Learning Log (например, вывод расширенной информации о проекте на домашней странице) и отправьте изменение в развернутую копию. Затем попробуйте внести более сложное изменение — на- пример, чтобы пользователь мог назначить тему общедоступной. Для этого в модель Topic добавляется атрибут с именем public (по умолчанию он должен быть равен False), а на стра- ницу new_topic — элемент формы, позволяющий превратить личную тему в общедоступ- ную. После этого проведите миграцию проекта и переработайте файл views.py, чтобы любая общедоступная тема также была видимой и для пользователей, не прошедших аутентифи- кацию. Не забудьте провести миграцию базы данных после отправки изменений на Heroku. Итоги В этой главе вы узнали, как придать вашему проекту простой, но профессио- нальный внешний вид при помощи библиотеки Bootstrap и приложения django- bootstrap4 . При использовании Bootstrap выбранные вами стили будут работать одинаково практически на всех устройствах, используемых для работы с вашим проектом. Вы узнали о шаблонах Bootstrap и использовали шаблон Navbar static для создания простого оформления Learning Log. Вы научились использовать элемент jumbotron для визуального выделения сообщений домашней страницы и узнали, как органи- зовать единое стилевое оформление всех страниц на сайте. 482 Глава 20 • Оформление и развертывание приложения В последней части проекта вы узнали, как развернуть проект на серверах Heroku, чтобы с ним мог работать любой желающий. Вы создали учетную запись Heroku и установили инструменты, упрощающие процесс развертывания. Вы использовали Git для закрепления рабочего проекта в репозитории и отправили репозиторий на серверы Heroku. Наконец, вы узнали, как защитить приложение, включив режим DEBUG=False на работающем сервере. Итак, работа над Learning Log закончена, и вы можете взяться за построение соб- ственных проектов. Начните с простых приложений и убедитесь в том, что прило- жение заработало, прежде чем наращивать сложность. Пусть ваше обучение будет интересным — и удачи с вашими собственными проектами! Послесловие Поздравляю! Вы изучили основы Python и применили полученные знания для построения реальных проектов. Вы построили компьютерную игру, провели визуа- лизацию данных и создали веб-приложение. Теперь перед вами открыто несколько разных направлений, по которым вы можете повышать свою квалификацию про- граммиста. На первых порах продолжайте работу над осмысленными проектами, которые пред- ставляют для вас интерес. Программирование становится более интересным, когда вы решаете актуальные, важные задачи, а к этому моменту вы знаете достаточно для того, чтобы участвовать в самых разных проектах. Придумайте собственную игру или напишите свою версию классической аркадной игры. Попробуйте проана- лизировать данные, важные для вас, и создайте визуализации, которые выявляют интересные закономерности и связи. Создайте собственное веб-приложение или сымитируйте одно из своих любимых приложений. По возможности предлагайте другим людям использовать ваши программы. Если вы написали игру — пусть кто-нибудь сыграет в нее. Если вы построили визуа- лизацию, покажите ее другим людям и посмотрите, как они воспримут результат. Если вы создали веб-приложение, разверните его в интернете и предложите другим опробовать его. Прислушивайтесь к мнению пользователей и старайтесь учитывать полученную информацию в своих проектах; это поможет вам стать профессионалом более высокого класса. В ходе работы над собственными проектами вы столкнетесь с проблемами, которые будет слишком трудно или даже невозможно решить самостоятельно. Поищите новые способы обратиться за помощью, найдите свое место в сообществе Python. Вступите в местную группу пользователей Python или присоединитесь к одному из сетевых сообществ. Рассмотрите возможность посещения ближайшей конфе- ренции PyCon. Постарайтесь выдержать баланс между работой над проектами, интересующими вас, и развитием ваших общих навыков Python. В интернете можно найти много источников информации о Python, для программистов среднего уровня написано много книг. Теперь, когда вы овладели основами и знаете, как применять свои на- выки, многие из этих ресурсов станут доступными для вас. Работа с учебниками 484 Глава 20 • Послесловие и книгами Python закрепит изученный материал, углубит ваше понимание про- граммирования в целом и Python в частности. И когда вы после этого вернетесь к работе над проектами, вы сможете более эффективно решать более широкий круг задач. Поздравляем — вы проделали долгий путь! Желаем удачи в дальнейшем изучении Python! Приложения А Установка Python и диагностика проблем Python существует в нескольких разных версиях, с разными вариантами конфи- гурации в каждой операционной системе. Это приложение пригодится вам в том случае, если описание из главы 1 не сработало или вы захотите установить другую версию Python вместо той, которая поставлялась с вашей системой. Python в Windows Инструкции из главы 1 описывают установку Python при помощи официальной программы установки по адресу https://python .org/ . Если вам не удастся запустить Python после использования программы установки, инструкции по диагностике из этого раздела помогут вам добиться работоспособности Python. Поиск интерпретатора Python Если при вводе простой команды python произойдет ошибка, скорее всего, вы забыли установить флажок включения Python в переменную PATH при запуске программы установки. В этом случае необходимо сообщить Windows, где следует искать интерпретатор Python. Чтобы найти его, откройте содержимое диска C и найдите папку, имя которой начинается с Python (попробуйте ввести слово python на панели поиска Проводника Windows). Откройте папку и найдите файл с именем python в нижнем регистре. Щелкните правой кнопкой мыши на этом файле и вы- берите команду Свойства ( Properties ); путь к этому файлу будет отображаться под заголовком Размещение ( Location ). Чтобы сообщить Windows, где следует искать интерпретатор, откройте терминаль- ное окно и введите путь, за которым следует команда --version : $ C:\\Python37\python --version Python 3.7.2 В вашей системе путь может выглядеть немного иначе, например C:\Users\ пользо- ватель \Programs\Python37\python . При использовании этого пути Windows сможет запустить интерпретатор Python. Python в Windows 487 Включение Python в переменную PATH Вводить полный путь каждый раз, когда вы захотите открыть терминал Python, довольно утомительно, поэтому мы добавим этот путь в системное окружение, чтобы вы могли использовать команду python . Откройте Панель управления своей системы, выберите категорию Система и безопасность ( System and Security ), затем выберите Система ( System ). Щелкните на ссылке Дополнительные параметры ( Advanced System Settings ). В открывшемся окне щелкните на кнопке Переменные среды ( Environment Variables ). В поле Системные переменные ( System variables ) найдите переменную с именем Path Щелкните на имени Path , затем на кнопке Изменить (Edit). Должен открыться список мест, которые просматриваются вашей системой при поиске программ. Щелкните на кнопке New и вставьте путь к вашему файлу python .exe в открывшемся текстовом поле. Если ваша система настроена так же, как и моя, результат будет выглядеть так: C:\Python37 Обратите внимание: мы не включаем имя файла python .exe , а только сообщаем системе, где его следует искать. Закройте терминальное окно и откройте новое. Новое содержимое переменной Path будет загружено в терминальном сеансе. Теперь при вводе команды python --version запускается версия Python, которая только что была задана в перемен- ной Path . Теперь вы можете запустить терминальный сеанс Python, просто введя команду python в командной строке. ПРИМЕЧАНИЕ Если вы работаете в более ранней версии Windows, при нажатии кноп- ки Изменить (Edit) может появиться поле Значение переменной (Variable Value) . Про- крутите его до правого края при помощи клавиши → . Будьте внимательны — вы не должны заменить существующее значение; если это произойдет, щелкните на кнопке Отмена (Cancel) и повторите попытку . Добавьте точку с запятой и путь к файлу python . exe в существующую переменную: %SystemRoot%\system32\...\System32\WindowsPowerShell\v1.0\ ;C:\Python37 Переустановка Python Если вам все еще не удается запустить Python, нередко удаление Python и повторный запуск программы установки решают проблемы, возникшие при первой попытке. Откройте панель управления в своей системе и выберите Programs and Features Прокрутите список, найдите в нем только что установленную версию Python и выберите ее. Щелкните на кнопке Uninstall/Change , затем на кнопке Uninstall в от- крывшемся диалоговом окне. Снова запустите программу установки в соответствии с инструкциями из главы 1, но на этот раз проследите за тем, чтобы был установлен флажок Add Python to PATH ; также проверьте другие настройки, относящиеся к вашей системе. Если вы все еще сталкиваетесь с проблемами и не знаете, куда обратиться за помощью, обращайтесь к рекомендациям в приложении В. |