Чертежи в колбе - PullRequest
       7

Чертежи в колбе

0 голосов
/ 31 августа 2018

Я использую приложение Flask, которое имеет пользовательский модуль, но не имеет целевой страницы. Структура проекта:

|-application.py
|-manage.py
|-settings.py
|-/templates
|----base.html
|----index.html
|----navbar.html
|----/user
|--------views.py

application.py:

from flask import Flask

....

def create_app(**config_overrides):
    app = Flask(__name__)
    app.config.from_pyfile('settings.py')

    app.config.update(config_overrides)

    db.init_app(app)

    from user.views import user_app
    app.register_blueprint(user_app)

    return app

Пользователь / views.py:

from flask import Blueprint, render_template, request, redirect, session, url_for, abort
...

user_app = Blueprint('user_app', __name__)

@user_app.route('login', methods = ('GET','POST'))
def login():
  ....

Я поместил index.html в папку templates .

Должен ли я поместить view.py в корневой каталог, куда я бы поместил маршрут к index.html?

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете добавить дополнительные маршруты в любом месте.

Однако, поскольку пакет использует фабрику приложений create_app(), вы не можете зарегистрировать эти маршруты с помощью декоратора @app.route(); приложение создано не таким образом, чтобы его можно было просто импортировать.

Так что да, создание модуля views.py является хорошей организационной идеей, но создайте там также Blueprint() и зарегистрируйте этот проект в функции create_app() с экземпляром приложения Flask().

В views.py:

from flask import Blueprint

bp = Blueprint('main', __name__)

@main.route('/')
def index():
    # produce a landing page

и create_app(), application.py, добавьте

import views
app.register_blueprint(views.bp)

(Я использую соглашение об использовании имени переменной bp для всех моих чертежей, а затем просто импортирую модуль и регистрирую атрибут module.bp).

Это явный вызов import и app.register_blueprint(), который связывает любые чертежи, используемые в Flask проекте, с маршрутами конечного приложения. Чертежи могут иметь одинаковый префикс, в том числе без префикса.

Стоит отметить: здесь модуль views теперь является модулем верхнего уровня рядом с application.py. Было бы лучше, если бы все было перенесено в пакет , что дало бы вам больше свободы над тем, какие имена вы используете. Все модули в одном пакете имеют пространство имен, отделенные от других модулей верхнего уровня, таких как json и time и flask, поэтому не будет конфликтов, если вы захотите использовать одно и то же имя для одного из дополнительные модули в вашем проекте.

Вы бы переместили все, кроме manage.py, в подкаталог с именем, соответствующим проекту, и переместили application.py в __init__.py. Импорт может затем использовать from . import ... для импорта из текущего пакета и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...