Please download to get full document.

View again

of 30
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.

Документация на Flask (русский перевод) Выпуск

Category:

Self Improvement

Publish on:

Views: 0 | Pages: 30

Extension: PDF | Download: 0

Share
Related documents
Description
Документация на Flask (русский перевод) Выпуск мар. 10, Оглавление 1 Руководство пользователя Предисловие Предисловие для опытных программистов
Transcript
Документация на Flask (русский перевод) Выпуск мар. 10, 2018 Оглавление 1 Руководство пользователя Предисловие Предисловие для опытных программистов Инсталляция Быстрый старт Учебник Шаблоны Тестирование приложений Flask Журналирование ошибок приложения Отладка ошибок приложения Обработка конфигурации Flask Сигналы Сменные представления (Pluggable Views) Контекст приложения Flask Контекст запроса Flask Модульные приложения Flask с использованием blueprint ов Расширения Flask Работа с командной оболочкой Заготовки для Flask Варианты развёртывания Справка об API API (перевод на начальной стадии) Дополнительные заметки Проектные решения во Flask FAQ по HTML/XHTML Статус перевода на Статус перевода на i Содержание модулей Python 185 ii Глава 1 Руководство пользователя Эта, в значительной мере скучная часть документации, начинается с некоторой вводной информации о Flask, а затем фокусируется на инструкциях по веб-разработке шаг-за-шагом с использованием Flask. 1.1 Предисловие Перед началом работы с Flask начните отсюда. Надеемся, вы получите ответы на некоторые вопросы о задачах и назначении проекта, а также узнаете о том, когда вам следует, а когда не следует его использовать Что означает «микро»? Микро не означает, что ваше веб-приложение целиком помещается в один файл с кодом на Python, хотя, конечно же это может быть и так. Также, это не означает, что Flask испытывает недостаток функциональности. «Микро» в слове «микрофреймворк» означает, что Flask стремится придерживаться простого, но расширяемого ядра. Flask не будет решать за вас многие вещи, например, какую базу данных использовать. А те решения, которые он может принять, например, который из движков для работы с шаблонами использовать, легко изменить. Всё остальное зависит от вас, таким образом, может оказаться, что Flask - всё, что вам нужно, и ничего лишнего. По умолчанию, Flask не включает уровень абстракции баз данных, валидации форм или каких-то иных, для чего уже существуют различные занимающиеся этим библиотеки. Вместо этого, Flask поддерживает расширения для добавления подобной 1 функциональности в ваше приложение, таким образом, как если бы это было реализовано в самом Flask. Многочисленные расширения обеспечивают интеграцию с базами данных, валидацию форм, обработку загрузок на сервер, различные открытые технологии аутентификации и так далее. Flask может быть «микро», но при этом он готов для использования в реальных задачах для самых разнообразных нужд Конфигурация и Соглашения Flask имеет много параметров конфигурации с разумными значениями по умолчанию, и мало предварительных соглашений. По соглашению, шаблоны и статические файлы хранятся в поддиректориях внутри дерева исходных текстов на Python, с названиями templates и static соответственно. Хотя это можно и поменять, обычно этого делать не стоит, особенно в самом начале работы Расти вместе с Flask Однажды, скачав и запустив Flask, вы найдёте в сообществе множество доступных его расширений, для их интеграции в ваш реально работающий проект. Команда разработки ядра Flask рассматривает расширения и гарантирует, что одобренные расширения не перестанут работать с будущими релизами. Пока ваша кодовая база растёт, вы вольны принимать уместные для вашего проекта решения. Flak обеспечит простейший слой для склейки, выполненный настолько хорошо, насколько это позволяет сделать Python. Вы можете реализовать расширенные шаблоны в SQLAlchemy или в ином средстве для работы с БД, в необходимых случаях применить надёжные нереляционные базы данных и использовать преимущества изначально не предназначенных для работы с фреймворками средств, построенных для работы с WSGI - веб интерфейсом для языка Python. Flask для настройки его поведения содержит множество крючков (хуков). Если вам нужны дополнительные настройки, класс Flask построен, чтобы быть готовым к созданию подклассов. Если это вас заинтересовало, проверьте раздел becomingbig. Если вам любопытны принципы, в соответствии с которым спроектирован Flask, посмотрите раздел Проектные решения во Flask. Продолжение: Инсталляция, Быстрый старт, или Предисловие для опытных программистов. Оригинал этой страницы 1.2 Предисловие для опытных программистов Внутрипоточные объекты (Thread-Locals) во Flask Одним из проектных решений для Flask было то, что простые задачи должны быть простыми; они не должны требовать большого объёма кода, а ещё они не должны 2 Глава 1. Руководство пользователя ограничивать вас. Поэтому, при создании Flask было выбрано несколько решений, которые некоторым людям могут показаться неожиданными или оригинальными. Например, внутри себя Flask использует внутрипоточные объекты, поэтому вам в запросе, чтобы сохранять потокобезопасность (thread-safe), необязательно передавать объекты от функции к функции. Такой подход удобен, но требует дейстивительный контекст запроса для внедрения зависимостей или при попытке повторного использования кода, который использует значение, привязанное к запросу. Flask к внутрипоточным переменным относится честно, не скрывает их и всегда явно указывает в коде и в документации, где бы они не использовались Разработка для Веб с осторожностью При создании веб-приложений всегда думайте о безопасности. Если вы пишете веб-приложение, вы, вероятно, позволяете пользователям регистрироваться и оставлять их данные на сервере. Пользователи доверяют вам свои данные. И даже если вы являетесь единственным пользователем, который может внести данные в приложение, всё равно вы хотите надёжно их сохранить. К сожалению, существует множество способов, чтобы скомпрометировать защиту с точки зрения безопасности веб-приложения. Flask защищает вас от одной и наиболее распространённых проблем безопасности современных веб-приложений: от межсайтового скриптинга (cross-site scripting - XSS). Если только вы не пометите небезопасный HTML-код как безопасный, вас прикроет Flask и нижележащий шаблонизатор Jinja2. Но существует и множество других способов вызвать проблемы с безопасностью. Документация предупредит вас о тех аспектах веб-разработки, которые требуют внимания к безопасности. Некоторые из этих соображений являются гораздо более сложными, чем можно было бы подумать, и иногда все мы недооцениваем вероятность того, что уязвимость будет использована - а в это время толковый злоумышленник вычисляет способы для взлома наших приложений. Н надейтесь, что ваше приложение не настолько важно, чтобы привлечь злоумышленника. При некоторых видах атаки есть вероятность, что автоматизированные боты зондируют различные способы заполнения вашей базы данных спамом, ссылками на вредоносные программы и т. п. В том, что вы, как разработчик, в процессе разработки в соответствии с вашей постановкой задачи, должны действовать с осторожностью, и при этом следить за попытками взлома, Flask ничем не отличается от других фреймворков Статус Python 3 В настоящее время сообщество Python находится в процессе совершенствования библиотек для поддержки новой итерации языка программирования Python. Хотя ситуация и резко улучшается, есть ещё некоторые вопросы, из-за которых пользователям трудно переключиться на Python 3 прямо сейчас. Эти проблемы частично вызваны не прошедшими длительной опробации изменениями в языке, частично тем, что мы 1.2. Предисловие для опытных программистов 3 ещё не работали с низкоуровневыми изменениями уровня API, внесёнными Python 3 в работу с Unicode. Мы настоятельно рекомендуем использовать Python 2.7 с активированными предупреждениями о несовместимостях с Python 3. Если в ближайшем будущем вы планируете обновиться до Python 3, мы настоятельно рекомендуем вам прочитать статью Как писать код, совместимый со следующими версиями Python. Если вы уже созрели до работы с Python 3, посмотрите страницу python3-support. Продолжение: Инсталляция или the Быстрый старт. Оригинал этой страницы 1.3 Инсталляция Flask зависит от некоторых внешних библиотек - таких, как Werkzeug и Jinja2. Werkzeug - это инструментарий для WSGI - стандартного интерфейса Python между веб-приложениями и различными серверами, предназначен как для разработки, так и развёртывания. Jinja2 занимается отображением шаблонов. Итак, как же быстро получить всё необходимое на ваш компьютер? Есть много способов, которыми вы это можете проделать, но самый обалденный - это virtualenv, так что давайте глянем в первую очередь на него. Для начала вам понадобится Python 2.6 или новее, так что убедитесь, что у вас инсталлирован свежий Python 2.x. При использовании Flask с Python 3 загляните в раздел python3-support virtualenv Возможно, Virtualenv - именно то, что вы захотите использовать при разработке, а если у вас на рабочем сервере есть доступ к командной оболочке, вероятно, вы захотите использовать Virtualenv и здесь. Какую из проблем решает virtualenv? Если вам нравится Python так, как он нравится мне, скорее всего, вы захотите использовать его и в других проектах - вне приложений, созданных на базе Flask. Но чем больше у вас проектов, тем больше вероятность, что вы будете работать с разными версиями самого Python, или, по крайней мере, с различными версиями библиотек Python. Посмотрим правде в глаза: довольно часто библиотеки нарушают обратную совместимость, и маловероятно, что серьёзное приложение будет работать вообще без каких-либо зависимостей. Так что же делать, если два или более из ваших проектов имеют конфликтующие зависимости? Наше спасение - Virtualenv! Virtualenv предоставляет несколько соседствующих друг с другом установленных версий Python, по одной для каждого проекта. На самом деле он реально не устанавливает различные версии Python, но обеспечивает хитрый 4 Глава 1. Руководство пользователя способ создать для проектов несколько изолированных друг от друга окружений. Давайте посмотрим, как работает virtualenv. Если вы работаете с MacOS X или с Linux, есть вероятность, что заработает одна из следующих двух команд: $ sudo easy_install virtualenv или даже лучше: $ sudo pip install virtualenv Возможно, одна из этих команд установит virtualenv на вашей системе. А может быть, это позволит сделать ваш пакетный менеджер. Если вы используете Ubuntu, попробуйте: $ sudo apt-get install python-virtualenv Если у вас Windows и команда easy_install не работает, вам необходимо сначала установить её. Чтобы получить дополнительную информацию о том, как это можно сделать, проверьте раздел pip и setuptools в MS Windows. Установив данную команду, запустите её, как указано чуть выше, но без префикса sudo. После того, как virtualenv была установлена, просто запустите командный интерпретатор и создайте ваше собственное окружение. Обычно в таких случаях я создаю папку проекта, а в ней - папку venv: $ mkdir myproject $ cd myproject $ virtualenv venv New python executable in venv/bin/python Installing setuptools, pip...done. Теперь, когда вы захотите работать над проектом, вам необходимо лишь активировать соответствующее окружение. Под MacOS X и Linux, выполните следующее: $. venv/bin/activate Если вы используете Windows, для вас подойдёт следующая команда: $ venv\scripts\activate В любом случае, теперь вы должны использовать ваш virtualenv (обратите внимание, как изменилось приглашение вашей командной оболочки - для того, чтобы показать активное окружение). А если вы захотите вернуться обратно в «реальный мир», используйте команду: $ deactivate Полсе этого подсказка вашей командной оболочки вернёт свой прежний привычный вид Инсталляция 5 Теперь, двинемся дальше. Для того, чтобы Flask появился в вашем виртуальном окружении, введите команду: $ pip install Flask Через несколько секунд вы сможете двинуться в дальнейший путь Установка непосредственно в систему Возможен и такой вариант установки, но я бы вам его не рекомендовал. Просто запустите pip с привилегиями суперпользователя: $ sudo pip install Flask (Под Windows, запустите ту же команду, но только без sudo, внутри окна с командной строкой, запущенного с привилегиями администратора системы) Жизнь на переднем краю Если вы хотите работать с самой последней версией Flask, существует два пути: можно указать pip, чтобы он загрузил версию для разработки, или можно работать со срезом с текущего состояния репозитория git. В обоих случаях, рекомендуется пользоваться virtualenv. Получите срез с последнего состояния git в новом окружении virtualenv и запустите в режиме разработки: $ git clone Initialized empty Git repository in ~/dev/flask/.git/ $ cd flask $ virtualenv venv New python executable in venv/bin/python Installing setuptools, pip...done. $. venv/bin/activate $ python setup.py develop... Finished processing dependencies for Flask Будет скачана и активирована в virtualenv текущая версия, соответствующая последнему (головному) срезу из git. В дальнейшем, чтобы обновиться до последней версии, всё, что вам будет необходимо сделать - это выполнить git pull origin pip и setuptools в MS Windows Иногда получение стандартных инструментов по работе с пакетами в Python - таких, как pip, setuptools и virtualenv может быть несколько мудрёным, но на самом деле в этом нет ничего сложного. Вам нужны два ключевых пакета - setuptools и pip 6 Глава 1. Руководство пользователя - которые позволят вам инсталлировать всё остальное (в том числе virtualenv). К счастью, есть два готовых скрипта, запустив которые вы можете развернуть оба пакета «с нуля». Если у вас их нет, скрипт get-pip.py осуществит инсталляцию обоих (вам не нужно будет запускать ez_setup.py). get-pip.py Для инсталляции последней версии setuptools, вы можете использовать следующий скрипт, предназначенный для разворачивания «с нуля»: ez_setup.py Оба этих скрипта необходимо скачать и запустить двойным щелчком мыши. Если у вас уже есть pip, вы можете обновить его, запустив команду: pip install --upgrade pip setuptools Чаще всего, получив приглашение командной строки, вы захотите иметь возможность набрать pip и python, что должно привести к запуску этих команд, однако в Windows этого автоматически не происходит, потому что операционная система не знает, где располагаются их исполнимые файлы (вы можете попробовать!). Чтобы исправить это, вам необходимо перейти в папку, куда вы установили Python (например, C:\Python27), а затем в подпапки Tools, Scripts; затем найти файл win_add2path.py и запустить его. Далее открыть новую Командную строку и проверить, что при вводе python запускается командный интерпретатор. Наконец, для того, чтобы инсталлировать virtualenv, вы можете просто ввести: pip install virtualenv Теперь, когда вы установили всё, что нужно, выполнив вышеизложенные инструкции, можно откинуться на спинку кресла. Оригинал этой страницы 1.4 Быстрый старт Рвётесь в бой? Эта страница даёт хорошее введение в Flask. Предполагается, что вы уже имеете установленный Flask. Если это не так, обратитесь к секции Инсталляция Минимальное приложение Минимальное приложение Flask выглядит примерно так: from flask import Flask app = Flask( name ) 1.4. Быстрый старт 7 @app.route('/') def hello_world(): return 'Hello World!' if name == ' main ': app.run() Просто сохраните его под именем наподобие hello.py и запустите с помощью вашего интерпретатора Python. Только, пожалуйста, не давайте приложению имя flask.py, так как это вызовет конфликт с самим Flask. $ python hello.py * Running on Проследовав по ссылке вы увидите ваше приветствие миру. Итак, что же делает этот код? 1. Сначала мы импортировали класс Flask. Экземпляр этого класса и будет вашим WSGI-приложением. 2. Далее мы создаём экземпляр этого класса. Первый аргумент - это имя модуля или пакета приложения. Если вы используете единственный модуль (как в этом примере), вам следует использовать name, потому что в зависимости от того, запущен ли код как приложение, или был импортирован как модуль, это имя будет разным (' main ' или актуальное имя импортированного модуля соответственно). Это нужно, чтобы Flask знал, где искать шаблоны, статические файлы и прочее. Для дополнительной информации, смотрите документацию Flask. 3. Далее, мы используем декоратор route(), чтобы сказать Flask, какой из URL должен запускать нашу функцию. 4. Функция, которой дано имя, используемое также для генерации URL-адресов для этой конкретной функции, возвращает сообщение, которое мы хотим отобразить в браузере пользователя. 5. Наконец, для запуска локального сервера с нашим приложением, мы используем функцию run(). Благодаря конструкции if name == ' main ' можно быть уверенным, что сервер запустится только при непосредственном вызове скрипта из интерпретатора Python, а не при его импортировании в качестве модуля. Для остановки сервера, нажмите Ctrl+C. Публично доступный сервер Если вы запустите сервер, вы заметите, что он доступен только с вашего собственного компьютера, а не с какого-либо другого в сети. Так сделано по умолчанию, потому что в режиме отладки пользователь приложения может выполнить код на Python на вашем компьютере. 8 Глава 1. Руководство пользователя Если у вас отключена опция debug или вы доверяете пользователям в сети, вы можете сделать сервер публично доступным, просто изменив вызов метода run() таким вот образом: app.run(host=' ') Это укажет вашей операционной системе, чтобы она слушала сеть со всех публичных IP-адресов Режим отладки Метод run() чудесно подходит для запуска локального сервера для разработки, но вы будете должны перезапускать его всякий раз при изменении вашего кода. Это не очень здорово, и Flask здесь может облегчить жизнь. Если вы включаете поддержку отладки, сервер перезагрузит сам себя при изменении кода, кроме того, если что-то пойдёт не так, это обеспечит вас полезным отладчиком. Существует два способа включить отладку. Или установите флаг в объекте приложения: app.debug = True app.run() Или передайте его как параметр при запуске: app.run(debug=true) Оба метода вызовут одинаковый эффект. Внимание. Несмотря на то, что интерактивный отладчик не работает в многопоточных окружениях (что делает его практически неспособным к использованию на реальных рабочих серверах), тем не менее, он позволяет выполнение произвольного кода. Это делает его главной угрозой безопасности, и поэтому он никогда не должен использоваться на реальных «боевых» серверах. Снимок экрана с отладчиком в действии: 1.4. Быстрый старт 9 Предполагаете использовать другой отладчик? Тогда смотрите Работа с отладчиками Маршрутизация Современные веб-приложения используют «красивые» URL. Это помогает людям запомнить эти URL, это особенно удобно для приложений, используемых с мобильных устройств с более медленным сетевым соединением. Если пользователь может перейти сразу на желаемую страницу, без предварительного посещения начальной страницы, он с большей вероятностью вернётся на эту страницу и в следующий раз. Как вы увидели ранее, декоратор route() используется для привязки функции к URL. Вот простейшие def index(): return 'Index def hello(): return 'Hello World' 10 Глава 1. Руководство пользователя Но это еще не все! Вы можете сделать определенные части URL динамически меняющимися и задействовать в функции несколько правил. Правила для переменной части Чтобы добавлять к адресу URL переменные части, можно эти особые части выделить как variable_name . Затем подобные части передаются в вашу функцию в качестве аргумента - в виде ключевого слова. Также может быть использован конвертер - с помощью задания правила следующего вида converter:variable_name . Вот несколько интересных def show_user_profile(username): # показать профиль данного пользователя return 'User %s' % def show_post(post_id): # вывести сообщение с данным id, id - целое число return 'Post %d' % post_id Существуют следующие конвертеры: int float path принимаются целочисленные значения как и int, только значения с плавающей точкой подобно поведению по умолчанию, но допускаются слэши Уникальные URL / Перенаправления Правила для URL, работающие в Flask, основаны на модуле маршрутизации Werkzeug. Этот модуль реализован в соответствие с идеей обеспечения красивых и уникальных URL-адресов на основе исторически попавшего в обиход - из поведения Apache и более ранних HTTP серверов. Возьмём два def projects(): return 'The project def about(): retu
Similar documents
View more...
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks