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