77 votes

Comment organiser une application Flask relativement importante ?

Je suis en train de construire ma première application Flask et je n'arrive pas à trouver un moyen Pythonique propre et efficace d'organiser mon application. Je ne veux pas tout avoir dans un seul fichier .py comme dans leur exemple. Je voudrais que chaque partie de mon application soit dans un module séparé. Quelle serait une bonne façon d'organiser les choses ?

86voto

imwilsonxu Points 1256

J'ai créé un projet boilerplate Flask appelé " Fbone ", n'hésitez pas à le consulter et à bifurquer :)

Fbone (Flask bone) est une application Flask (micro-framework Python) de type template/bootstrap/boilerplate.

Vue d'ensemble

  • Bien conçu pour les grands projets utilisant des plans.
  • Intégrer avec le framework frontend le plus chaud : jQuery / html5boilerplate / bootstrap.
  • Soutenu par le célèbre SQLalchemy.
  • Implémentation de l'astucieux "remember me" par flask-login.
  • Gérer les formulaires web par flask-wtform.
  • Tests unitaires avec flask-testing et nose.
  • Déploiement facile via fabric et mod_wsgi (exemple inclus).
  • i18n par flask-babel

Au fait, je viens de trouver ceci wiki sur la construction d'un grand projet avec Flask utile, pls check it !

20voto

Alex Morega Points 1937

Flask 0.7 implémente Blueprints . Ils sont parfaits pour utiliser le route sans importer l'objet principal de l'application.

20voto

edsioufi Points 3696

Assurez-vous de lire Matt Wright merveilleux poste sur le sujet.

Le poste présente :

  1. Une description d'une structure pour les projets de grands flacons

  2. Un exemple d'application sur Github

  3. Une description des meilleures pratiques de conception en général lorsqu'il s'agit de grandes applications web, comme le modèle MVC, les fabriques d'applications, les services et la migration des données, pour n'en citer que quelques-uns (la fonctionnalité la plus intéressante, selon moi).

12voto

msiemens Points 406

Je travaille sur un gros projet Flask (selon mes critères) (5000 lignes de code Python et il n'est qu'à moitié terminé). Le client veut que le projet soit modulaire, alors j'ai adopté cette approche :

La structure de mes dossiers ressemble à ceci :

├── __init__.py
├── modules.yml
├── config
├── controllers
│   └── ...
├── lib: Common functions I use often
│   └── ...
├── models
│   └── ...
├── static: All static files
│   ├── css
│   ├── img
│   └── js
└── templates: Jinja2 templates
    └── ...

Sur modules.yml Je définis mes modules, y compris le nom et l'URL. De cette façon, le client est en mesure d'activer/désactiver les modules sans toucher à un seul fichier Python. En outre, je génère les menus sur la base de la liste des modules. Par convention, chaque module dispose de son propre module Python dans le fichier controllers/ qui chargera son model de models/ . Chaque contrôleur définit un Blueprint enregistré comme le nom du contrôleur. Par exemple, pour un user j'ai dans controllers/user.py :

# Module name is 'user', thus save Blueprint as 'user' variable
user = Blueprint('user', __name__)

@user.route('/user/')
def index():
    pass

De cette façon, je peux lire le modules.yml dans mon __init__.py et charger et enregistrer dynamiquement tous les modules activés :

# Import modules
for module in modules:

    # Get module name from 'url' setting, exculde leading slash
    modname = module['url'][1:]

    try:
        # from project.controllers.<modname> import <modname>
        mod = __import__(
            'project.controllers.' + modname, None, None, modname
        )
    except Exception as e:
        # Log exceptions here
        # [...]

    mod = getattr(mod, modname)  # Get blueprint from module
    app.register_blueprint(mod, url_prefix=module['url'])

J'espère que cela pourra vous inspirer :)

2voto

Juzzbott Points 130

J'ai écrit un billet décrivant comment j'en suis venu à structurer de grandes applications Flask.

Il utilise des plans pour séparer les zones fonctionnelles de l'application, ainsi que des utilisations pratiques pour les API, les formulaires, les modèles, la configuration, etc.

J'ai également couvert la manière de faire fonctionner le serveur en dehors du module principal du projet (python server.py).

http://juzzbott.com.au/2014/03/how-to-structure-a-large-flask-application/

J'espère que cela pourra être utile aux gens :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X