2013-03-23 59 views
7

可以说,我要建一个项目的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 

它加载从意见我所有的应用程序内部
我想保持这种结构,因为延长了项目的进一步是更自然的方式

我试图按照他们的advice,但真的不明白的地方,我需要写

from flask import Flask 

app = Flask(__name__) 

以及如何进口来自所有应用程序的所有视图在一个地方,请大家帮忙

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

from facebook import app 

回答

7

我试图蓝图,并与对我的作品的解决方案来了,让我知道,如果你有其他的想法。

项目结构

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 expense import expense 
from budget import budget 

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 
+0

该要点的链接不起作用。 – Rynant 2014-02-12 18:12:41

+0

试试这个 - https://gist.github.com/harit-sunrun/5227850#file-flask-blueprint-py – daydreamer 2014-02-12 21:03:54

+1

是的,工作。我已将链接中的代码添加到答案中,因为不支持链接的答案(请参阅:http://meta.stackexchange.com/a/8259) – Rynant 2014-02-18 16:12:25

10

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

回答你的第二个问题

from flask import Flask 
app = Flask(__name__) 

你应该把这个变成facebook/__init__.py

顺便说一句,我的runserver.pysettings.py始终驻留facebook/下一个水平。

像这样:的runserver.py

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 

内容:

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") 
+0

扩大了答案 – Tigra 2013-03-23 18:45:03

+0

谢谢!,我已经用其他方式排序了,请参阅我的回答 – daydreamer 2013-03-23 19:43:32

相关问题