#python #flask
#python #flask
Вопрос:
Я начинаю изучать python и следую этому руководству по настройке Flask, но у меня возникли некоторые проблемы с пониманием автора в том, как он размещает свои файлы. Из того, что я могу собрать, похоже, что я столкнулся с проблемой циклического импорта, и я не могу с этим справиться.
Файлы настроены следующим образом:
__init__.py
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = "something here";
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite://app.db"
app.py
from flask import render_template, request, redirect, url_for, abort, session
from app import app
@app.route('/')
.... some stuff here
models.py
from flask.ext.sqlalchemy import SQLAlchemy
from app import app
db = SQLAlchemy(app)
class User(db.Model):
.... some stuff here
manage.py
#!/usr/bin/env python
from flask.ext.script import Manage, Shell, Server
from app import app
manage = Manager(app)
manager.add_command("runserver", Server())
manager.add_command("shell", Shell())
@manager.command
def createdb():
from app.models import db
db.create_all()
manager.run()
Первая ошибка заключается в невозможности запуска сервера при запуске manage.py запустить сервер. Я смог сделать это изначально, пока не переключил файлы вокруг инициализированного приложения внутри init.py (первоначально у меня все было расположено в app.py ). Я получаю сообщение об ошибке —
ImportError: cannot import name app
Это в стороне, если я исключу init.py и запустите и запустите сервер, я не могу создать базу данных, потому что получаю сообщение об ошибке с указанием —
Import Error: no module named models
при запуске manage.py createdb
Комментарии:
1. Вы пытаетесь импортировать приложение из приложения в приложение ?…
2. Связано ли это с тем, как называются каталоги? У меня есть родительская папка с именем «app», в то время как в руководстве родительская папка называется «example» и использует «из примера приложения для импорта», поэтому я записал ее как «из приложения для импорта приложений»
3.
from x import y
означает «из модуля x импортировать имена y». Действительно ли ваш файл инициализации вызывается точноinit.py
? Так и должно быть__init__.py
. Его цель — преобразовать каталог в пакет. Обычно вы не вкладываете в него много / никакого кода.4. Да, его имя init . Таким образом, приложение для импорта приложений подразумевает импорт приложения (объекта flask) из app.py файл?
5. Ну, да, но само по себе это ничего не значит. Переименуйте свой
init.py
файл в__init__.py
и прочитайте еще одно руководство, а также прочитайте docs.python.org/2/tutorial/modules.html