2013-01-23 8 views
20

Ich beginne ein flask Projekt, und in meinem Code ich habeFlask Verwirrung mit App

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

nun genau das, was app ist?

Ich verfolge this guide und ich bin besonders verwirrt über die Struktur, weil er entschieden hat, Verzeichnis app/ benannt haben und ist seine app/__init__.py er hat

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

und in seiner app/views.py er hat

from app import app 

Was zum Teufel ist es mit all diesen app ?!

+0

Das sind nur Namen und die Typen der Objekte sollte klar sein, können Sie sich erneut Zustand/klären Sie Ihre Frage? – XORcist

+2

Was wird in der 'App Import App' importiert? – kasperhj

Antwort

21

Ich denke, die Haupt Verwirrung in der Leitung ist:

from app import app 

Sie ein Python-Paket haben (ein Ordner mit __init__.py Datei) mit dem Namen "app". Aus diesem Ordner importieren Sie nun die Variable „App“, die Sie unten in __init__.py-Datei definiert:

app = Flask(__name__) 

Benennen Sie den Ordner aus app „myproject“ zu sagen. Dann rufen Sie

from myproject import app 

Außerdem werden Sie Ansichten importieren als

from myproject import views 
11

Der Autor hat seinen Code unnötig verwirrend gemacht, indem er einen Paketnamen gewählt hat, der mit Flasks üblichem Anwendungsobjektinstanznamen identisch ist. Dies ist diejenige, die Sie am meisten interessiert sein werden in:

app = Flask(__name__) 

Hier ist die Dokumentation auf der Flasche Anwendungsobjekt:

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

Um Verwirrung zu vermeiden, empfehle ich mit den official Flask documentation statt, dass führen.

3

Das ist in der Tat ein wenig verwirrend, wegen der schlechten Namen Wahl.

  • app = Flask(__name__): hier app ist eine WSGI Anwendung, es implementiert die entsprechende Schnittstelle und unterstützt auch was Flask uns, dass an der Spitze zu bieten hat.
  • from app import app: importiert genau das app Objekt aus der Packung app.
  • from app import view: Für was zum Teufel er views dort importieren, ist ein bisschen ein Geheimnis, ich denke, er will sicherstellen, dass die Ansicht Bindungen ausgeführt werden. (Ich würde das lieber in run.py machen). In jedem Fall ist das eine Art Importschleife zwischen zwei Modulen, die zumindest auch verwirrend ist.