19

假设我想建立一个项目 Facebook

我需要一个像这样的项目结构

facebook/
         __init__.py
         feed/
             __init__.py
             models.py
             business.py
             views.py
         chat/
             __init__.py
             models.py
             business.py
             views.py
         games/
             __init__.py
             models.py
             business.py
             views.py
         common/
             common.py

         runserver.py

我怎样才能很好地构建这个结构,以便在我运行时

python facebook/runserver.py

它会在内部加载我所有应用程序的视图吗?
我想保持这种结构,因为进一步扩展项目是更自然的方式

我正在尝试听从他们的建议,但不太明白我需要在哪里写

from flask import Flask

app = Flask(__name__)

以及如何在一个地方从所有应用程序中导入所有视图,请帮助

如果说我把上面的代码写在里面facebook/__init__.py,那么facebook/feed/views.py我可以怎么做

from facebook import app
4

2 回答 2

21

使用蓝图。您的每个子应用程序都应该是一个蓝图,并且您将每个子应用程序加载到您的主 init 文件中。

回答你的第二个问题

from flask import Flask
app = Flask(__name__)

你应该把它放入facebook/__init__.py

顺便说一句,我的runserver.pysettings.py始终位于facebook/.

像这样:

facebook/
         __init__.py
         feed/
             __init__.py
             models.py
             business.py
             views.py
         chat/
             __init__.py
             models.py
             business.py
             views.py
         games/
             __init__.py
             models.py
             business.py
             views.py
         common/
             common.py

runserver.py
settings.py

内容runserver.py

from facebook import app
app.run()

我想settings.py不应该解释的内容。

内容facebook/__init__.py

from flask import Flask
app = Flask(__name__)
app.config.from_object('settings')
from blog.views import blog #blog is blueprint, I prefer to init them inside views.py file
app.register_blueprint(blog,url_prefix="/blog")
于 2013-03-23T18:37:00.540 回答
20

我已经尝试了蓝图并提出了一个适合我的解决方案,如果您有其他想法,请告诉我。

项目结构

facebook/
        runserver.py
        feed/
            __init__.py
            views.py
        chat/
            __init__.py
            views.py

代码

# create blueprint in feed/__init__.py
from flask import Blueprint

feed = Blueprint('feed', __name__)
import views

# create blueprint in chat/__init__.py
from flask import Blueprint

chat = Blueprint('chat', __name__)
import views

# add views (endpoints) in feed/views.py
from . import feed

@feed.route('/feed')
def feed():
    return 'feed'

# add views (endpoints) in chat/views.py
from . import chat

@chat.route('/chat')
def chat():
    return 'chat'

# register blueprint and start flask app
from flask import Flask
from feed import feed
from chat import chat

app = Flask(__name__)
app.register_blueprint(feed)
app.register_blueprint(chat)
app.run(debug=True)

在行动

 * Running on http://127.0.0.1:5000/
# Hit Urls
http://127.0.0.1:5000/feed # output feed
http://127.0.0.1:5000/chat # output chat
于 2013-03-23T19:44:30.477 回答