2013-03-23 76 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

相關問題