我正在做一个烧瓶项目。 该项目的结构如下:
├── project
│ ├── config.py
│ ├── __init__.py
│ ├── models.py
│ ├── main
│ ├── static
│ ├── templates
│ └── users
└── run.py
run.py
from project import create_app
app = create_app()
if __name__=="__main__":
app.run(debug=True)
__ init __。py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from project.config import Config
db = SQLAlchemy()
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
from project.main.routes import main
from project.users.routes import users
app.register_blueprint(main)
app.register_blueprint(users)
return app
models.py
from flask import current_app
from project import db
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.image_file}')"
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"
我的问题是,当我在project/project
目录中打开终端并打开python提示符并从models.py导入Users或Post时,它给了我错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/aman/Desktop/websites/project/project/models.py", line 2, in <module>
from project import db
ModuleNotFoundError: No module named 'project'
但是很明显,该项目确实存在并且也是python模块,因为我在项目目录中创建了一个 init .py文件。 请帮助我。
答案 0 :(得分:1)
最后,我发现我试图从项目模块内部导入db和Users。当我尝试从项目模块的外部目录访问db和Users时,我终于成功了。
我要导入数据库的初始目录:
/home/aman/Desktop/websites/project/project
这会导致错误。
现在,我正在导入数据库的目录:
/home/aman/Desktop/websites/project
效果很好。