приложение Flask с фабрикой - отдельный файл маршрутов

Я пытаюсь выяснить структуру файлов приложения фляги. Я использовал flask-dotenv, а FLASK_APP - main.py

myapp / .flaskenv - указывает FLASK_APP myapp / main.py myapp / app / init .py - имеет функцию create_app (). Это также импортирует db из db.py myapp / app / db.py - функций, связанных с базой данных

Я бы хотел, чтобы все маршруты были в отдельном файле routes.py (а не в методе create_app (). Myapp / app / routes.py

Я был бы признателен за помощь в поиске того, как я могу связать этот routes.py.

заранее спасибо


person Rob T    schedule 31.08.2020    source источник


Ответы (1)


Вы можете использовать blueprint для организации и регистрации своих маршрутов.

По сути, у вас может быть такая структура папок:

app/ <-- your entire application folder
    auth/                               <-- blueprint package for /auth route
        __init__.py                     <-- blueprint creation
        routes.py                       <-- authentication routes
    profile/
        __init__.py                     <-- blueprint package for /profile route
        routes.py                       <-- profile routes
    __init__.py                         <-- ceate_app and blueprint registration

Под вашим пакетом маршрутов, например в папке auth:

# app/auth/__init__.py
# this is initialize auth blueprint
from flask import Blueprint
bp = Blueprint('auth',__name__,)
from app.auth import routes

Затем вы можете поместить все свои authentication маршруты в auth/routes.py, но вместо использования app.route вам нужно использовать bp.route следующим образом:

# app/auth/routes.py
# this is where you can put all your authentication routes
from app.auth import bp
# notice here the route '/login' is actually prefixed with 'auth'
# because in the following code I added "url_prefix='/auth' " in the create_app() factory.
# the full routes will be 'auth/login' on your website.
@bp.route('/login', methods=['GET','POST'])
def login():
    ....your login code...

Тогда в вашем __init__.py вы можете сделать это:

# app/__init__.py
from app.auth import bp as auth_bp
from app.profile import bp as profile_bp
    
def create_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    app.register_blueprint(auth_bp,url_prefix='/auth')
    app.register_blueprint(profile_bp,url_prefix='/profile')

Таким образом, все маршруты к yourdomain.com/auth/... будут в app/auth/routes.py; все маршруты до yourdomain.com/profile/... будут в вашем app/profile/routes.py.

Ознакомьтесь с этим замечательным руководством по Flask для получения более подробной информации:

Мега-учебник Flask от Мигеля Гринберга

Эта конкретная часть посвящена тому, как лучше организовать структуру приложения.

person fusion    schedule 31.08.2020
comment
Ясно спасибо. На самом деле я старался избегать использования чертежей. Это было бы очень простое тестовое приложение на моем собственном локальном хосте. Возможно ли это без чертежа? - person Rob T; 01.09.2020