Создание Web сайтов на Python. Основы flask и HTML
Содержание
Введение
Для создания веб сайта с «нуля» на сокетах необходимо проделать огромный пласт не особо нужной работы. В связи с этим, при разработки сайтов гораздо проще и правильнее использовать уже написанный ранее инструментарий для создания сайтов. На python — это фреймворки для создания веб-приложений django и flask
djangoпредставляет из себя громоздкий фреймворк, в то время какflaskявляется микрофреймворком,- позволяющий создавать как маленькие простые, так и достаточно громоздкие интернет сайты. Введение в программирование сайтов на flask и будет приведено в данном уроке.
Введение в flask
Пустой простой сайт на flask
import flask app = flask.Flask(__name__) #Здесь будем дописывать сайт # Добавим возможность "запуска файла" if __name__ == "__main__": app.run(debug = True)
Не используйте для работы с flask файл с именем flask.py
Запуск сайта на flask
$ cd <flask application directory> $ export FLASK_APP=<app_filename.py> $ export FLASK_DEBUG=1 $ flask run
На Windows необходимо использовать set вместо export
После запуска перейдите на http://127.0.0.1:5000/ и увидите
Not Found
The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
Что ожидаемо, поскольку сайт пуст.
Добавление главной страницы
Создадим главную страницу в нашем сайте (обычно запрашивается по / или /index.html):
@app.route('/') @app.route('/index.html') def index_page(): return 'Это главная Страница сайта'
Обновив страницу, вы увидите ,обозначенный выше, текст.
Понятно, что каждый раз генерировать html целиком страницу, осуществлять передачу файлов
и осуществлять другие стандартные действия ‒ лишняя работа, уже реализованная в flask.
Структура web приложения на flask:
При создании приложения на flask необходимо сразу организовать файловую структуру. Пример
flask_demo ├── flask_app │ ├── config_base.py │ ├── __init__.py │ ├── static │ │ └── css │ │ └── base.css │ └── templates │ └── index.html ├── instance │ └── config.py └── run.sh
Здесь:
flask_demo‒ Папка со всей информацией о сайтеflask_app‒ Папка, содержащая непосредственно сайт: изменения в данной папке стоит фиксировать git-омconfig_base.py‒ файл примера настроек сайта__init__.py— Главный файл сайта на flaskstatic— Папка со статичными файлами (css,js,pdf,zip, прочие)css— Статичная папка для хранения стилевых файлов (см. далее)base.css— Базовый стилевой файл (см. далее)templates— Папка шаблонов страниц сайта (см. далее)index.html— шаблон главной страницыinstance‒ Папка «текущего» сайта: на вашем компьютере содержит различные отладочные данные, на рабочем сервере содержит рабочие реальные данныеconfig.py— настройки «текущего» сайтаrun.sh— Файл запуска сайта
Пример Вы можете скачать здесь
Рассмотрим его внимательнее.
Файл __init__.py
import flask def create_app(): ''' Function: create_app Summary: Создание flask приложения ''' app = flask.Flask(__name__, instance_relative_config=True, template_folder="templates", static_folder="static") # загружаем настройки app.config.from_pyfile('config.py', silent=False) # Главная страница сайта @app.route('/') @app.route('/index.html') def index_page(): return flask.render_template('index.html', var="some data") return app
Как Вы видите, файл содержит только create_app — функцию, по созданию flask приложения.
Отдельно рассмотрим строчку
app = flask.Flask(__name__, instance_relative_config=True, template_folder="templates", static_folder="static")
Здесь происходит создание пустого flask приложения, с указанием:
instance_relative_config— Настройки сайта располагаются в папкеinstancetemplate_folder— указание имени папки с шаблонами страниц. По умолчанию равно"templates"и может не задаватьсяstatic_folder— указание имени папки со статичными файлами. По умолчанию равно"static"и может не задаваться
Теперь же рассмотрим строчку
return flask.render_template('index.html', var="some data")
Тут происходит возвращение шаблона index.html из папки с шаблонами в установкой параметра var в "some data".
Имена и количество передаваемых параметров определяете самостоятельно.
Введение в HTML
Изучим содержание шаблонного файла index.html
<!DOCTYPE html> <HTML> <HEAD> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/base.css') }}"> <TITLE> Мой сайт на flask </TITLE> </HEAD> <BODY> Текст на первой странице </BODY> </HTML>
В первой строке расположена «особая» запись, поясняющая браузеру, что разметка страницы произведена на языке HTML 5. Сейчас заниматься изучением старых версий разметки (в том числе XHTML) не имеет смысла, в силу их неактуальности. Однако, лучше сообщить браузеру информацию, что Вы используете именно пятую версию HTML.
<!DOCTYPE html>
Далее идёт блок непосредственно всей страницы, окаймлённый открывающим <HTML> и закрывающим </HTML> тегами.
<HTML> … </HTML>
Вся страница делиться на голову, содержащую различную вспомогательную информацию о странице,
<HEAD> … </HEAD>
и тело, внутри которого располагается содержимое страницы
<BODY> … </BODY>
Заголовок сайта (печатается на вкладке браузера)
<TITLE> Мой сайт на flask </TITLE>
Подключение таблицы стилей (см. ниже) при помощи тега, не требующего закрытия, и с тремя параметрами rel, type и href:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/base.css') }}">
Конструкция {{ url_for('static', filename='css/base.css') }} даёт понять «отрисовщику» шаблона,
что на данное место сайта необходимо вставить результат работы python функции url_for (находиться в модуле flask).
Данная функция возвращает адрес статического (static) файла css/base.css.
По аналогии с этим, конструкция {{ var }} вставит в сайт значение var, переданное функции render_template
как именованный параметр.
Некоторые HTML теги
Ниже будет приведена таблица HTML тегов. В ней:
- Тег — название тега
- З — вид тега
- ⧾ — тег необходимо открыть (
<тег>) и закрыть (</тег>) - ⧿ — тег закрывать не надо
- ⧾ — тег необходимо открыть (
- Параметры — некоторые параметры тега
| Тэг | З | Описание | параметры |
|---|---|---|---|
HTML |
⧾ | Основной тег содержания сайта | |
HEAD |
⧾ | Заголовок сайта | |
BODY |
⧾ | Основное содержание страницы |
|
P |
⧾ | «абзац» | align ‒ выравнивание текста |
A |
⧾ | Гиперссылка | href ‒ адрес гиперссылки |
IMG |
⧿ | Вставка картинки |
|
BR |
⧿ | Разрыв строки | |
HR |
⧿ | Разрыв строки горизонтальной линией |
|
SPAN |
⧾ | Сам по себе ничего не делает, используется для пометки текстов | |
DIV |
⧾ | Выделяет блок | align |
STYLE |
⧾ | Определение стилей (см. далее) | |
H1 – H6 |
⧾ | Определяет заголовок 1 – 6 уровня | align |
UL |
⧾ | Маркированный список |
|
OL |
⧾ | Нумерованный список |
|
LI |
⧾ | Элемент списка UL и OL |
type, start |
B |
⧾ | жирный текст | |
i |
⧾ | наклонный | |
U |
⧾ | подчёркнутый | |
TABLE |
⧾ | Таблица |
|
TR |
⧾ | Строка таблицы | align, bgcolor |
TD |
⧾ | Ячейка таблицы | align, bgcolor |
Параметры, которые можно использовать в любом теге:
| Параметр | Описание |
|---|---|
| style | изменение стиля (см. далее) тега |
| id | определение идентификатора (подразумевается, что он уникален) |
| class | определение принадлежности классу |
Больше тегов и их параметры можно посмотреть здесь
CSS (каскадные таблицы стилей)
HTML позволяет определять стили для любых тегов.
Использование стилей позволяет изменять поведение и отображение тегов до неузнаваемости.
Определять стиль можно:
#. Внутри тега STYLE;
#. В отдельном css файле;
#. Внутри тега через параметр style.
Принцип определения стиля в отдельном файле совпадает с определением внутри тега STYLE
Пример:
<!-- определим свои стили --> <style> /* Так выглядят комментарии здесь */ a /* далее внутри фигурных скобок определяем стиль для тега "a" */ { color: white; /* определяем цвет текста - белый */ background-color: rgba(255, 127, 0, 0.5); /* цвет фона по составляющим: красный - 255 (максимум) зелёный - 127 синий - 0 (минимум) прозрачность - 50% */ } .red_text /* определяем стиль для класса "red_text" */ { color: rgb(255,0,0); } .blue_text{ } .red_text, .blue_text /* определяем стиль для двух классов */ { text-shadow: 5px -10px 2px black; /* добавляем тексту тень */ padding: 5px; /* внутренний отступ от границ */ } </style> Тут <a href="?">ссылка на текущую страницу</a>. А тут — <span class="red_text">красный текст</span>. Это — <a href="?" class="red_text">красная ссылка </a>. Здесь <span style="font-size:2em">Определяем стиль внути тега</span>.
Результат:
Стилевых параметров значительное количество. Наиболее адекватно — изучить их здесь
Важно Все размеры в css необходимо задавать вместе с размерностью. Иначе результат может быть неправильным.
| сокращение | описание обозначения размерности |
|---|---|
px |
Размер в пикселях экрана |
pt |
Пункт (1/72 дюйма) (обычная величина измерения размера шрифта) |
pc |
Пика (1pc ≡ 12pt) |
cm |
Сантиметры |
mm |
Миллиметры |
in |
Дюймы |
% |
Размер в процентах (зачастую не самыю удобный вид размера) |
em |
Текущий размер шрифта |
rem |
Базовый размер шрифта |
vw |
Процент ширины окна браузера |
vh |
Процент высоты окна браузера |
Способы передачи данных между сайтом и браузером рассмотрим на следующей неделе.
Задача
- Разработайте структуру персонального сайта-визитки на flask
- Создайте сайт на flask и напишите обработчики для, определённых вами, страниц
- Напишите соответствующие страницы на языке HTML