🏠 | 💻 IT | Flask |

Как разбить приложение Flask на части

↓ Contents ↓
Introduction
Предпосылки
Новый файл
Регистрация нового чертежа
url_for
open_resource

Introduction

Разбиение приложения на части происходит с помощью чертежей - 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 и в оригинальном файле это выглядело примерно так:

{{ url_for('second/1') }}

То теперь нужно заменить / на .

{{ url_for('second.1') }}

Шаблоны для порядка тоже имеет смысл переложить в отдельную папку templates/

open_resource

Если раньше вы писали with app.open_resource теперь нужно писать with bp.open_resource

Например:

def load_db(): with bp.open_resource('file.json') as f: return json.load(f)

↓ Статьи о Flask ↓
Python
Flask
Запуск Flask на хостинге
Запуск Flask на Linux сервере
Первый проект на Flask
Шаблоны Jinja
Flask FAQ
Web Forms
Errors
Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: