| Introduction | |
| Предпосылки | |
| Новый файл | |
| Регистрация нового чертежа | |
| url_for | |
| open_resource |
Разбиение приложения на части происходит с помощью чертежей - Blueprints.
Прочитать про них подробнее можно
здесь
.
В этой статье - руководство к действию
У вас есть основной файл __init__.py или app.py в котором вы уже создали приложение
Flask
Url обслуживаются с помощью @app.route
Допустим, у вас есть группа url вида
@app.route('/first/1', methods = ['GET'])
…
@app.route('/first/2', methods = ['GET'])
…
@app.route('/first/3', methods = ['GET'])
…
и группа url вида
@app.route('/second/1', methods = ['GET'])
…
@app.route('/second/2', methods = ['GET'])
…
@app.route('/second/3', methods = ['GET'])
…
Те url, которые начинаются на second
вы хотите выделить в отдельное подприложение, или просто хотите разбить
главный файл на части, чтобы было проще искать нужный код.
Нужно будет сделать несколько действий, первое из которых - создание нового .py файла
Создайте рядом с главным файлом новый файл second.py
Импортируйте туда всё, что было нужно для работы + functools
Из flask обязательно импортируйте Blueprint
это ключевой модуль для данной операции.
import functools
from flask import (
Blueprint, flash, g, redirect, render_template, request, session, url_for
)
from werkzeug.security import check_password_hash, generate_password_hash
После импорта добавьте строку
bp = Blueprint('api', __name__, url_prefix='/second')
url_prefix='/second' означает, что все url в этом подприложении будут начинаться с second
Добавьте ваши url, но @app. замените на @bp. и second/ писать уже не нужно
@bp.route('/1', methods = ['GET'])
…
@bp.route('/2', methods = ['GET'])
…
@bp.route('/3', methods = ['GET'])
…
Файл second.py готов
Теперь в главном файле, скорее всего он называется __init__.py
удалите перемещённые url
И зарегистрируйте новое подприложение прописав его чертёж
from . import second
app.register_blueprint(second.bp)
Вы, скорее всего, пользовались url_for и в оригинальном файле это выглядело примерно так:
{{ url_for('second/1') }}
То теперь нужно заменить / на .
{{ url_for('second.1') }}
Шаблоны для порядка тоже имеет смысл переложить в отдельную папку templates/
Если раньше вы писали with app.open_resource теперь нужно писать with bp.open_resource
Например:
def load_db():
with bp.open_resource('file.json') as f:
return json.load(f)
| Python | |
| Flask | |
| Запуск Flask на хостинге | |
| Запуск Flask на Linux сервере | |
| Первый проект на Flask | |
| Шаблоны Jinja | |
| Flask FAQ | |
| Web Forms | |
| Errors |
|
Share in social media:
|