2013-03-23 9 views
7

Diciamo che voglio costruire un progetto di Facebookpallone: ​​come progettare il progetto con più app?

ho bisogno di una struttura di progetto come

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 

Come posso strutturare questo bene in modo che quando ho eseguito

python facebook/runserver.py 

Si carica vista da tutte le mie app internamente?
voglio mantenere tale struttura in quanto l'estensione del progetto è più naturale ulteriore modo

Sto cercando di seguire il loro advice, ma non capisco dove ho bisogno di scrivere

from flask import Flask 

app = Flask(__name__) 

e come importare tutte le viste da tutte le applicazioni in un unico posto, per favore aiutatemi

Se Diciamo che scrivo il codice di cui sopra in facebook/__init__.py, allora come in facebook/feed/views.py, posso fare

from facebook import app 

risposta

7

Ho provato schemi e si avvicinò con una soluzione che funziona per me, fatemi sapere se avete altre idee.

Progetto Struttura

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

Codice

# 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) 

In Azione

* 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

Il collegamento al gist non funziona. – Rynant

+0

Prova questo: https://gist.github.com/harit-sunrun/5227850#file-flask-blueprint-py – daydreamer

+1

Sì, ha funzionato. Ho aggiunto il codice dal link alla risposta in quanto le risposte al solo collegamento non sono preferite (vedi: http://meta.stackexchange.com/a/8259) – Rynant

10

Utilizzare blueprints. Ognuna delle tue sotto-applicazioni dovrebbe essere un progetto e tu carichi ognuna di esse nel tuo file di init principale.

rispondere alla tua seconda domanda

from flask import Flask 
app = Flask(__name__) 

Si dovrebbe mettere questo in facebook/__init__.py

BTW, il mio runserver.py e settings.py risiede sempre un livello sotto facebook/.

Ti piace questa:

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 

Contenuto runserver.py:

from facebook import app 
app.run() 

Suppongo che il contenuto di settings.py non dovrebbe essere spiegato.

Contenuto 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

ampliato la risposta – Tigra

+0

Grazie!, L'ho risolto in un altro modo, per favore vedi la mia risposta – daydreamer

Problemi correlati