web-dev-qa-db-fra.com

Comment organiser une application Flask relativement importante?)

Je crée ma première Flask et je ne peux pas trouver une bonne façon propre et pythonique d'organiser mon application. Je ne veux pas avoir tout dans un seul fichier .py comme dans leur exemple. Je voudrais avoir chaque partie de mon application dans un module séparé. Quelle serait une bonne façon d'organiser les choses?

74
daniels

J'ai créé un Flask passe-partout appelé " Fbone ", n'hésitez pas à le vérifier et à le bifurquer :)

Fbone (Flask bone) est une application modèle/bootstrap/passe-partout Flask (microframework Python)).

Présentation

  • Bien conçu pour les grands projets utilisant un plan.
  • Intégrez avec le framework frontend le plus chaud: jQuery/html5boilerplate/bootstrap.
  • Soutenu par la célèbre SQLalchemy.
  • Implémentez un "souvenir de moi" délicat en vous connectant à flask.
  • Gérez les formulaires Web par flask-wtform.
  • Test unitaire avec test de flacon et nez.
  • Déployez facilement via fabric et mod_wsgi (exemple inclus).
  • i18n par flask-babel

btw, je viens de trouver cela wiki sur la construction d'un grand projet avec Flask utile, veuillez le vérifier!

82
imwilsonxu

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

20
Alex Morega

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

Le poste présente:

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

  2. n exemple d'application sur Github

  3. Une description des meilleures pratiques de conception en général en ce qui concerne les grandes applications Web, comme le modèle MVC, les usines d'applications, les services et la migration des données pour n'en nommer que quelques-unes (caractéristique la plus intéressante à mon humble avis).

17
edsioufi

Je travaille sur un grand projet (= selon mes normes) Flask (5000 lignes de code Python et il n'est qu'à moitié fini). Le client veut que le projet d'être modulaire, j'ai donc pris cette approche:

Ma structure de 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
    └── ...

Dans modules.yml Je définis mes modules dont le nom et l'URL. De cette façon, le client peut activer/désactiver les modules sans toucher à un seul fichier Python. De plus, je génère les menus en fonction de la liste des modules. Par convention, chaque module possède son propre Python- module dans controllers/ qui chargera son model depuis models/. Chaque contrôleur définit un Blueprint stocké comme nom du contrôleur. Par exemple. pour un module 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 peut vous inspirer :)

12
msiemens

J'ai travaillé sur un réseau social construit au sommet de Flask. La particularité de mon projet était que le serveur sert uniquement des points de terminaison API et le frontend est une application Backbone d'une page. La structure Flask que j'ai prise est la suivante:

├── app │ ├── api
│ │ ├── auth.py │ │ └── ... │ ├── app.py │ ├── common │ │ ├── constants.py │ │ ├── helpers.py │ │ ├── response.py │ │ └── ... │ ├── config.py │ ├── extensions.py │ ├── frontend │ │ └── controllers.py │ ├── static │ │ └── ... │ ├── templates │ │ ├── app.html │ │ └── ... │ └── users │ ├── UserConstants.py │ ├── UserForms.py │ ├── UserHelpers.py │ ├── UserModels.py │ └── __init__.py ├── alembic | ├── version │ └── ... ├── tests │ └── ...

Vous pouvez lire l'article plus approfondi que j'ai écrit sur le sujet ici . J'ai trouvé qu'il était beaucoup plus intuitif de séparer différentes zones fonctionnelles dans son propre dossier.

J'ai travaillé sur le code il y a un certain temps et je l'ai complètement ouvert! Vous pouvez le vérifier sur github .

3
spchuang

J'ai créé un Flask app yapper à partir de zéro et l'ai intégré à gulp pour le développement frontend et backend. Il est un moteur de blog simple mais facilement modifiable pour évoluer en fonction des besoins, bien structuré à l'aide de Blueprints.

Commander la page du projet yapper

2
brijeshb42