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?
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
btw, je viens de trouver cela wiki sur la construction d'un grand projet avec Flask utile, veuillez le vérifier!
Flask 0.7 implémente Blueprints . Ils sont parfaits pour utiliser le décorateur route
sans importer l'objet d'application principal.
Assurez-vous de lire Matt Wright ( merveilleux post sur le sujet.
Le poste présente:
Une description d'une structure pour les grands projets flask
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).
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 :)
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 .
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