关于flask项目结构和模块包的导入?

yzhengwei
  • 170

最近看了flask web开发中的项目结构,我的项目结构是下面这样的:

clipboard.png

首先请各位说下这种结构有没有问题?另外有一个问题就是像这种结构,比如像 auth模块和 main模块下分别有一个文件是数据类,在某些情况下如果这两个类代表的表要做关联关系,就必须在auth中的user中导入role,又必须在role中导入user,对于这种循环导入的问题该如何解决呢?(当然,实际中肯定不会把 user和role分开,这里只是举个例子)

clipboard.png

回复
阅读 5k
4 个回答

你看看这几个例子!

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    
class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child", back_populates="parent")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship("Parent", back_populates="children")

我觉得最好的解决方案还是把数据库模型都放在同一个文件中。关系型数据库表之间的关系比较密切,在不同文件中要解决循环导入的问题很困难。

楼主不建立一个user的包? 我心中楼主的目录结构^_^...

-- project
   -- main
      -- user
         -- models.py
            -- class User  # User和Role可以放一起,这样就可以避免一些循环导入.
            -- class Role # You can nest Role class in User class.
      -- auth
         -- models.py
         -- views.py
            -- some auth logic by importing user and role.
   -- lib
      -- some libraries
   -- static
      -- images
      -- css
      -- js
   -- templates
      -- some templates
   -- config.py
   -- manage.py

一般User和Role放在同一个文件里面,同时现在不建议使用外键(我司DBA不让用外键)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏