我进入Flask并构建了一个使用Flask SQLAlchemy的应用程序。我已经创建了一个基本API,当所有代码都在一个文件中时可以运行,但是希望更好地组织它,如下所示:
应用/模型/ user.py
from datetime import datetime
from app.app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
public_id = db.Column(db.String, unique=True)
admin = db.Column(db.Boolean)
username = db.Column(db.String(50), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(100))
subscription_plan = db.Column(db.Integer)
created_at = db.Column(db.DateTime, index=True,
default=datetime.utcnow())
updated_at = db.Column(db.DateTime, index=True, default=datetime.utcnow())
应用/ app.py
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash
import uuid
from app.models.user import User
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = #SQLALCHEMY_DATABASE_URI
db = SQLAlchemy(app)
# ... CRUD routes that will use User
@app.route('/user', methods=['POST'])
def create_user():
data = request.get_json()
hashed_password = generate_password_hash(data['password'])
new_user = User(
public_id=str(uuid.uuid4()),
username=data['username'],
password=hashed_password,
email=data['email'],
admin=data['admin'],
subscription_plan=data['subscription_plan']
)
db.session.add(new_user)
db.session.commit()
return jsonify({'message': 'User successfully created.'})
if __name__ == '__main__':
app.run(port=5000, debug=True)
我想将 app / app.py 中的db
导入我的 app / models / user.py 文件中,但是当我尝试将User
模型导入 app / app.py ,由于循环导入,它会给我一个错误。我不知道如何解决此问题,因为在{strong> app / app.py 传递User
的实例后,db
似乎需要app
。
我还希望将我的路线移出这里并进入单独的文件以便更好地组织,因此试图了解避免循环导入的最佳方法。非常感谢任何和所有的帮助!
答案 0 :(得分:2)
不是让用户导入应用和应用导入用户,而是将它们放在 init 中。
应用/ app.py 强>
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
应用/模型/ user.py 强>
from app.app import db
class User:
pass #access db the way you want
应用/ views.py 强>
from app.app import app,db
@app.route("/")
def home():
return "Hello World" # use db as you want
应用/ __初始化__。PY 强>
from app import app
from app.models.user import User
from app import views
这是解决问题的最简单方法。但是,我建议使用Application Factories
答案 1 :(得分:1)
我认为最好的方法是重新组织项目的结构。尝试将视图函数移动到单独的包或模块。您可以按照exploreflask来整理项目。或者您可以查看我的common project structure Flask项目。