2012-08-16 25 views
69

Mi aplicación de matraz consiste actualmente en un único archivo test.py con múltiples rutas y la ruta main() definida. ¿Hay alguna forma de que pueda crear un archivo test2.py que contenga rutas que no se manejaron en test.py?¿Cómo dividir la aplicación del matraz en varios archivos py?

@app.route('/somepath') 
def somehandler(): 
    # Handler code here 

Me preocupa que hay demasiadas rutas en test.py y que les gustaría hacerlo de tal manera que puedo correr python test.py, que también recogerá las rutas en las test.py como si fuera parte del mismo archivo. ¿Qué cambios debo hacer en test.py y/o incluir en test2.py para que esto funcione?

Respuesta

77

Puede utilizar la estructura habitual paquete de Python para dividir su aplicación en múltiples módulos, see the Flask docs.

Sin embargo,

Frasco utiliza un concepto de planos para la fabricación de componentes de la aplicación y el apoyo a los patrones comunes dentro de una aplicación o a través de aplicaciones.

Se puede crear un sub-componente de su aplicación como modelo en un archivo separado:

simple_page = Blueprint('simple_page', __name__, template_folder='templates') 
@simple_page.route('/<page>') 
def show(page): 
    # stuff 

y luego usarlo en la parte principal:

from yourapplication.simple_page import simple_page 

app = Flask(__name__) 
app.register_blueprint(simple_page) 

planos también pueden recursos específicos del paquete: plantillas o archivos estáticos. Consulte el Flask docs para obtener todos los detalles.

+0

¿cómo podemos tener las rutas del anteproyecto en otro archivo que __init__ de ese anteproyecto? – divyenduz

2

Dividir la aplicación en planos es una gran idea. Sin embargo, si esto no es suficiente, y si quiere dividir el Blueprint en varios archivos py, esto también es posible utilizando el sistema de importación de módulos Python y luego recorriendo todas las rutas que se importan de los otros archivos. .

he creado un Gist con el código para hacer esto:

https://gist.github.com/Jaza/61f879f577bc9d06029e

Por lo que yo sé, esta es la única forma viable para dividir un Plan en el momento. No es posible crear "sub-planos" en el frasco, a pesar de que hay un problema abierto con mucha discusión acerca de esto:

https://github.com/mitsuhiko/flask/issues/593

Además, incluso si fuera posible (y probablemente a hacer factible el uso algunos de los fragmentos de ese tema), los planos secundarios pueden ser demasiado restrictivos para su caso de uso de todos modos, por ejemplo si no desea que todas las rutas en un submódulo tengan el mismo prefijo de sub URL.

Cuestiones relacionadas