Blueprint - Чертежи Flask

Содержание
Введение
FLASK_APP
Просмотр всех методов (url_map)
Пример
Другие статьи о Flask

Введение

Чертежи нужны для разделения проекта на подпроекты. Обычно удобнее выделять какой-то функционал в отдельные .py файлы, классический import как в обычном Python коде делать не рекомендуется

Создание и регистрация чертежа без url_prefix

Предположим, в вашем проекте project есть папка app и в ней у вас уже есть рабочий __init__.py файл

Создайте файл blog.py в той же директории и напишите минимальный код.

touch app/blog.py
vi app/blog.py

from flask import ( Blueprint, flash, g, redirect, render_template, request, url_for ) bp = Blueprint('blog', __name__) @bp.route('/') def index(): return render_template('blog/index.html')

Обратите внимание, что url слушается с помощью @bp.route а не @app.route как в приложении без чертежей

Этот blueprint нужно зарегистрировать. Внесите изменения в __init__.py подразумевается, что приложение запущено через factory

vi app/__init__.py

from . import blog app.register_blueprint(blog.bp) app.add_url_rule('/', endpoint='index')

В директории templates создайте поддиректорию blog и поместите туда файл с шаблоном

mkdir app/templates/blog
touch app/templates/blog/index.html

При создании чертежа blog.py было передано всего два аргумента - название чертежа и __name__

bp = Blueprint('blog', __name__)

При регистарции этого черетежа в __init__.py endpoint был указан как index

from . import blog app.register_blueprint(blog.bp) app.add_url_rule('/', endpoint='index')

В этом случае у чертежа не будет определён url_prefix

Таким образом blog становится корневым

Второй вариант - задать префикс, рассмотрим его в следующем параграфе

url_prefix

Создайте файл auth.py с минимальным кодом

from flask import ( Blueprint, flash, g, redirect, render_template, request, url_for ) bp = Blueprint('auth', __name__, url_prefix='/auth')

Обратите внимание на строку

bp = Blueprint('auth', __name__, url_prefix='/auth')

При создании чертежа auth передаётся уже три аргумента: название чертежа, __name__ и url_prefix='/auth'

При регистрации этого чертежа не нужно дополнительно вызывать add_url_rule

from . import auth app.register_blueprint(auth.bp)

Шаблон

В папке templates создайте подпапку auth и поместите туда файл с шаблоном

mkdir app/templates/blog
touch app/templates/auth/login.html

Похожие статьи
Flask
Основы
Python
Запуск Flask на хостинге
Запуск Flask на Linux сервере
Flask в Docker
Первый проект на Flask
Шаблоны Jinja
Web Forms
Blueprint - Чертежи Flask
Как разбить приложение Flask на части
Flask FAQ
Ошибки
Декораторы в Python
HTML
CSS