meaning python flask

python - meaning - flask wikipedia



¿Cómo compartir el objeto de la aplicación global en el matraz? (6)

Estoy usando matraz y tratando de lo siguiente.

He definido un archivo main.py a través del cual quiero ejecutar mi aplicación, es decir, python main.py -

from flask import Flask from view import tags app = Flask(__name__) @app.route(''/'') def hello_world(): return ''Hello World!'' if __name__ == ''__main__'': app.run()

He definido un paquete denominado vista en el que declararé mis diferentes módulos de vista, cada uno con sus propias rutas. view.tags.py -

from flask import Flask app = Flask(__name__) @app.route(''/e'') def hello_world2(): return ''Hello World!''

Así que necesito tener el objeto de aplicación global en mi main.py para ejecutar el servidor, así como en las clases de vista de mi paquete para registrar las rutas. Entonces, ¿cómo creo el objeto de aplicación global y lo comparto entre todas las clases?

Gracias murtaza


Con respecto a la importación y el uso de current_app desde el matraz en una función python "auxiliar" en un archivo fuente separado, esto funciona siempre que ya se haya configurado el contexto de la aplicación actual (por ejemplo, se recibió una solicitud web). Tengo un caso en el que, durante la inicialización de la aplicación (app.run aún no se ha invocado), se invoca app.logger en la función auxiliar.

Antes de arreglarlo (ver más abajo), obtuve un seguimiento de pila puntuado por "RuntimeError: Trabajar fuera del contexto de la aplicación".

Solución de muestra:
main.py:

import helper ... app = Flask(__name__.split(''.'')[0], template_folder="templates", static_folder="static") ... # Fix: Create an app context with app.app_context(): helper.dbopen(...) ... app.run(...)

helper.py:

from flask import current_app as app ... def dbopen(): app.logger.info(...) ...


En primer lugar, sugiero echar un vistazo a Blueprints http://flask.pocoo.org/docs/blueprints/ Esto ayudará a organizar la aplicación fácilmente.

También eche un vistazo a http://flask.pocoo.org/docs/api/#flask.current_app flask.current_app, la forma de obtener su instancia de aplicación en otros módulos.

Este enlace también podría ser útil sobre cómo organizar y construir la aplicación matraz (no es ideal, pero puede darle algunas ideas) https://github.com/mitsuhiko/flask/wiki/Large-app-how-to

Que te diviertas :)


Puedes importar current_app desde el matraz. Almacena una referencia al objeto de aplicación global.

from flask import current_app as app def home(): return render_template(''base.html'', name=app.name)


Si tiene un archivo AppName.py en el que define la app y luego tiene otro archivo Foobar.py que lo necesita, siempre puede decir en AppName.py :

import Foobar Foobar.app = app

Luego, en Foobar.py deberías poder usar la aplicación en tus funciones. Una cosa de la que debe tener cuidado es que no puede tener un código en Foobar.py que se ejecute inmediatamente cuando se llama al archivo, esto depende de la variable de la app que se pasa después de la importación.


Solo importalo desde tus otros archivos. Quizás la mejor manera de hacer esto es colocar su objeto de aplicación en un solo archivo y hacer que todo lo demás importe desde él.

Por ejemplo, su main.py todavía podría tener:

from flask import Flask from view import tags app = Flask(__name__)

Y luego en otros archivos, podrías hacer:

from .main import app

o, si está fuera de su paquete, simplemente use la cadena completa

from mypackagename.main import app

Una cosa a tener en cuenta es las importaciones circulares. La forma más fácil de manejar este problema es crear su aplicación primero y luego importar lo que necesite desde su archivo base después de crearlo.

Así por ejemplo:

from flask import Flask app = Flask(__name__) # do some stuff with app from .views import view1, view2 from .server import run

Siempre que coloque las importaciones después de haber creado la aplicación, como la anterior, no debería tener un problema con las importaciones circulares.


Una forma es crear un paquete general y agregar un archivo __init__.py en el que se declaran todas las variables globales. En tu caso, por ejemplo, puedes crear algo como:

myapplication/ * __init__.py * myviews/ * __init__.py * view.py * tags.py

etc

Ahora agrega el siguiente código en el archivo __init__.py :

app = Flask(__name__)

Ahora puede utilizar esta variable de aplicación en cualquier lugar siempre que importe la aplicación de mi paquete.

import myapplication.myviews.view