2013-01-23 15 views
20

sto iniziando un progetto flask, e nel mio codice hoFlask confusione con app

from flask import Flask, render_template, abort 
app = Flask(__name__) 

Ora che cosa è esattamente app?

Seguo this guide e sono particolarmente confuso circa la struttura perché ha scelto di avere directory denominata app/ ed è il suo app/__init__.py ha

from flask import Flask 
app = Flask(__name__) 
from app import views 

e nel suo app/views.py ha

from app import app 

Che diavolo c'è con tutti questi app ?!

+0

Questi sono solo i nomi e le tipologie degli oggetti devono essere chiare, si può ri-Stato/chiarire la tua domanda? – XORcist

+2

Cosa viene importato nell'app 'from app import'? – kasperhj

risposta

21

penso che la confusione principale è in prima linea:

from app import app 

si ha un pacchetto python (una cartella con __init__.py file) denominato "app". Da questa cartella, si sta ora importando il "app" variabile definita di seguito nella __init__.py di file:

app = Flask(__name__) 

rinominare la cartella da app a dire "myproject". Poi si chiamerà

from myproject import app 

Inoltre, potrete importare viste come

from myproject import views 
11

L'autore ha reso il suo codice inutilmente confuso scegliendo un nome di pacchetto che è lo stesso del solito nome di istanza dell'oggetto dell'applicazione Flask. Questo è quello che sarete più interessati a:

app = Flask(__name__) 

Ecco la documentazione per l'oggetto applicazione Flask:

http://flask.pocoo.org/docs/api/#application-object

Per evitare confusione, mi consiglia di utilizzare il official Flask documentation al posto di quella guida.

3

Questo è davvero un po 'di confusione, a causa della scelta dei nomi poveri.

  • app = Flask(__name__): qui app è un'applicazione WSGI, implementa l'interfaccia corrispondente e supporta anche tutto ciò che ha da offrire Flask noi in cima a quello.
  • from app import app: importa esattamente l'oggetto app dal pacchetto app.
  • from app import view: Per che diamine sta importando views lì, è un po 'un mistero, suppongo che vuole assicurarsi che i collegamenti della vista siano eseguiti. (Preferirei farlo in run.py). In ogni caso, si tratta di una sorta di ciclo di importazione tra due moduli che è almeno altrettanto confuso.