Потыкав ссылки на отображаемой в браузере странице проекта понимаешь, что проект пока умеет не так уж и много. Собственно, своих страничек всего три, плюс ссылки на Flask-ресурсы.
На этом этапе важно, что проект работает.
В чёрном командном окне можем видеть лог работы встроенного веб-сервера Flask.
Структура созданного проекта несколько отличается от рекомендуемой гуру питона. Но нам же ехать, а не шашечки:
Distiller
├── requipments.txt
├── runserver.py
├── Distiller
│ ├── __init__.py
│ ├── views.py
│ ├── static
│ │ ├── content
│ │ ├── fonts
│ │ └── scripts
│ └── templates
│ ├── about.html
│ ├── contact.html
│ ├── index.html
│ └── layout.html
└── env
В корневой папке проекта два файла (requipments.txt и runserver.py) и две подпапки (Distiller и env).
В env хранится виртуальное окружение Python, Distiller – это пакет программ проекта вместе с необходимыми данными.
Файл requipments.txt содержит список модулей Python, которые нужно установить в виртуальное окружение для нормальной работы проекта.
Файл runserver.py – файл запуска проекта.
В файле __init__.py происходит начальная инициализация переменных и объектов проекта.
Вся магия веб-вывода осуществляется с помощью функций файла views.py.
В папке static хранятся файлы разметки страниц (content), фонты (fonts) и подключаемые скрипты (scripts).
Папка templates содержит шаблоны веб-страниц (один базовый - layout.html и три производных от базового).
Содержимое стартового файла runserver.py:
"""
This script runs the Distiller application using a development server.
"""
from os import environ
from Distiller import app
if __name__ == '__main__':
HOST = environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
--------------------------------------
Colored with http://dumpz.org
незамысловато. В нем запускается приложение Flask (строка app.run(HOST, PORT)). Приложение app импортируется из пакета Distiller (from Distiller import app), где оно инициализируется в файле __init__.py.
Файл инициализации проекта __init__.py тоже несложный:
"""
The flask application package.
"""
from flask import Flask
app = Flask(__name__)
import Distiller.views
--------------------------------------
Colored with http://dumpz.org
В нем импортируется класс Flask пакета flask и из этого класса создается экземпляр приложения flask.
Завершается инициализация импортом функций отображения веб-страниц, которые описаны в файле views.py:
"""
Routes and views for the flask application.
"""
from datetime import datetime
from flask import render_template
from Distiller import app
@app.route('/')
@app.route('/home')
def home():
"""Renders the home page."""
return render_template(
'index.html',
title='Home Page',
year=datetime.now().year,
)
@app.route('/contact')
def contact():
"""Renders the contact page."""
return render_template(
'contact.html',
title='Contact',
year=datetime.now().year,
message='Your contact page.'
)
@app.route('/about')
def about():
"""Renders the about page."""
return render_template(
'about.html',
title='About',
year=datetime.now().year,
message='Your application description page.'
)
--------------------------------------
Colored with http://dumpz.org
Нужно отметить, что __init__.py и views.py имеют циклические импорты друг у друга. Для исключения отрицательных последствий в файле __init__.py Distiller.views импортируется в последней строчке.
Три функции home(),contact() и about() возвращают сформированные из шаблонов страницы при обращении на соответствующий адрес сервера.
Таким образом, ничего сверхъестественного и никакого колдунства нет. Flask берёт всю работу по предоставлению страниц на себя. Естественно, нужно подготовить соответствующие шаблоны html, их разметку css и необходимые скрипты.