Structure des applications de ballon

J'essaie de créer une application simple, mais pas triviale avec Flask et je continue à courir dans une situation qui n'est pas bien expliquée dans les docs.

J'aimerais que mon application soit divisée entre différents modules, mais il semble qu'il soit difficile d'accéder à l'objet principal app (ou db de flask-sqlalchemy) depuis un autre endroit que le module principal. Il semble que vous deviez vraiment écrire votre propre façon de le traiter comme un global auquel tout a accès, ce qui nécessite un code douteux et un peu de temps.

Les Deux app et db sont créés au niveau où l'application principale est instanciée et chaque exemple suppose qu'ils sont disponibles au niveau supérieur. Mais si je divise différents gestionnaires d'url en différents modules, je perds la possibilité d'utiliser @app.route décorateur. Je peux contourner cela avec app.add_url_rule('/...', some.module...), mais là encore, l'application n'est pas passé à cette fonction.

La même chose se produit avec le db - Je ne sais pas si je devrais le coller dans g, ou le rendre accessible via app en quelque sorte. Cela ne m'aide pas à déplacer les modèles dans un module séparé - Comment suis-je censé accéder à db lors de leur importation? Tous les exemples supposent à nouveau qu'il est juste disponible en tant que variable locale.

Est-ce que je manque quelque chose d'évident, ou est-ce que j'essaie d'utiliser flask pour la mauvaise tâche ici?

22
demandé sur viraptor 2012-07-13 04:03:11

2 réponses

La réponse à votre question Est blueprints. En fait, si vous regardez la documentation, il est mentionné que les plans sont là pour permettre la division de l'application dans les modules.

Exemple de code:

    from flask import Blueprint

    mod = Blueprint(blueprint_name, __name__, template_folder="folder_name"
                    static_folder="folder_name")

    @mod.route('/mymodule')
    def view():
         # your code

Dans app.py

    from yourmodule import mod 

    app.register_blueprint(mod)

C'est la bonne façon de diviser application en modules. Consultez les documents blueprint pour plus de détails.

De plus, si vous avez besoin d'accéder à l'application dans un autre module, vous devez utiliser current_app proxy de l'application.

    from flask import current_app

Regarde ça document {[16] } qui guide Comment diviser l'application flask en modules pour les grands projets par le créateur de flask.

20
répondu codecool 2012-07-13 18:53:26

Avez-vous vu le nouveau blueprints feature (Je ne l'ai pas encore utilisé, mais cela ressemble à ceci Peut être utile dans votre cas).

2
répondu malangi 2014-01-16 22:56:56