Я запускаю проект flask, и в моем коде

from flask import Flask, render_template, abort
app = Flask(__name__)

Теперь, что именно app?

Я следую этому руководству, и я Я особенно озадачен структурой, потому что он выбрал каталог app/ и его app/__init__.py он имеет

from flask import Flask
app = Flask(__name__)
from app import views

И в своем app/views.py он имеет

from app import app

Какого черта со всеми этими app ?!

36
kasperhj 23 Янв 2013 в 22:05

3 ответа

Лучший ответ

Я думаю, что главная путаница заключается в следующем:

from app import app

У вас есть пакет Python (папка с файлом __init__.py) с именем «app». Из этой папки вы теперь импортируете переменную «приложение», которую вы определили ниже в файле __init__.py:

app = Flask(__name__)

Переименуйте папку из приложения, чтобы сказать «myproject». Потом позвонишь

from myproject import app

Кроме того, вы будете импортировать представления как

from myproject import views
32
codegeek 23 Янв 2013 в 21:47

Автор излишне запутал свой код, выбрав имя пакета, совпадающее с обычным именем экземпляра объекта приложения Flask. Это тот, который вас больше всего интересует:

app = Flask(__name__)

Вот документация по объекту приложения Flask:

http://flask.pocoo.org/docs/api/#application-object

Чтобы избежать путаницы, я рекомендую вместо этого руководства использовать официальную документацию по Flask.

13
ʇsәɹoɈ 23 Янв 2013 в 23:44

Это немного сбивает с толку из-за плохого выбора имен.

  • app = Flask(__name__): здесь app является WSGI приложением, оно реализует соответствующий интерфейс, а также поддерживает все, что Flask может предложить нам в дополнение к этому.
  • from app import app: импортирует именно этот app объект из пакета app.
  • from app import view: Для какого черта он импортирует views там, это немного загадка, я думаю, он хочет убедиться, что привязки вида выполнены. (Я бы лучше сделал это в run.py). В любом случае, это своего рода импортный цикл между двумя модулями, который, по крайней мере, сбивает с толку.
6
bereal 23 Янв 2013 в 18:48