からクラスをインポートできませんでした。ちょうど2つの青写真を定義した青写真に私の小さなアプリケーションを移行しました。models.py
私はこのエラーを取得しています:ImportError: cannot import name User
私はここで間違って何が起こっているのか見当がつかない。私は、循環的なインポートがないこと、またはそれが正確に何をするのかについて比較的自信があります。私は、Pythonと一般的なプログラミングの両方にかなり新しいです。
また、core.pyのインポート行をfrom users.models import *
に変更すると、Webページをロードするまで動作しますが、「グローバル名ユーザーが定義されていません」というトレースバックが表示されます。同じことがusers \ views.pyのインポート行にも適用されます。
私はそれをインポートしようとしている唯一の場所はここにあります。
core.py:
from flask import Flask, g
from flask_sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager, current_user
from flask.ext.bcrypt import Bcrypt
from assets.forms import SearchAssetTag
app = Flask(__name__)
app.config.from_object('config')
login_manager = LoginManager()
login_manager.init_app(app)
bcrypt = Bcrypt(app)
db = SQLAlchemy(app)
from users.models import User
@login_manager.user_loader
def load_user(user_id):
return User.query.filter(User.id == int(user_id)).first()
#Define headersearchform globally as it runs on every page with header.
@app.before_request
def before_request():
g.headersearchform = SearchAssetTag()
g.current_user = current_user
from users.views import users_blueprint
from assets.views import assets_blueprint
app.register_blueprint(users_blueprint)
app.register_blueprint(assets_blueprint)
そして/users/views.py、私は明らかにログインし、その他もろもろのためのユーザーオブジェクトを参照する必要がで。
from flask import render_template, request, session, url_for, redirect, flash, Blueprint
from core import app, db
from sqlalchemy.exc import IntegrityError
from forms import SignupForm, LoginForm
from models import User
from flask.ext.login import login_user, login_required, current_user, logout_user
users_blueprint = Blueprint('users', __name__, template_folder = 'templates')
フォルダ構造は次のようになります。
core.py
__init__.py
config.py
\users
__init__.py
views.py
forms.py
models.py
\templates
template.html
\assets
__init__.py
views.py
forms.py
models.py
\templates
template.html
最後に、これはUserクラスはSQLAlchemyのために定義されているmodel.pyファイルです:
from core import db, bcrypt
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String, nullable=False)
last_name = db.Column(db.String, nullable=False)
email = db.Column(db.String, nullable=False)
title = db.Column(db.String, nullable=False)
password = db.Column(db.String)
def __init__(self, first_name, last_name, email, title, password):
self.first_name = first_name
self.last_name = last_name
self.email = email
self.title = title
self.password = bcrypt.generate_password_hash(password)
定義されるであろうその方法は、実際にどのようにあなたの 'model.py'が原因あなたがここでそれをコピーしたかに無効なインデントに見える、またはされていることです(いずれにしても、それは修正する必要があります)。 – Gerrat
@Gerratいいえ、そうではありません。しかし、ここに固定。良いキャッチ。 – xGlorify
あなたは循環インポートを持っています - 'models.py'はコアから' db'をインポートし、 'core.py'はモデルから' User'をインポートしています。 – Gerrat