Structure de projet pour Google App Engine

| | | | | | | | | | | | | | | | | | | |

J'ai lancé une application dans Google App Engine dès sa sortie, pour jouer avec la technologie et travailler sur un projet fétiche auquel je réfléchissais depuis longtemps mais que je n'avais jamais eu le temps de démarrer. Le résultat est BowlSK. Cependant, au fur et à mesure qu'il a grandi et que des fonctionnalités ont été ajoutées, il est devenu très difficile de garder les choses organisées - principalement en raison du fait qu'il s'agit de mon premier projet python et que je n'en savais rien avant de commencer à travailler.

Ce que j'ai :

  • Le niveau principal contient :
    • tous les fichiers .py (je ne savais pas comment faire fonctionner les packages)
    • tous les modèles .html pour les pages de niveau principal
  • Sous-répertoires :
    • dossiers séparés pour css, images, js, etc.
    • dossiers contenant des modèles .html pour les URL de type sous-répertoire

Exemple :
http://www.bowlsk.com/ correspond à la page d'accueil (package par défaut), modèle sur "index.html"
http://www.bowlsk.com/games/view-series.html?series=7130 mappe vers ViewSeriesPage (encore une fois, package par défaut), modèle sur "games/view-series.html"

C'est méchant. Comment puis-je restructurer? J'ai eu 2 idées :

  • Dossier principal contenant : appdef, indexes, main.py ?

    • Sous-dossier pour le code. Cela doit-il être mon premier package ?
    • Sous-dossier pour les modèles. La hiérarchie des dossiers correspondrait à la hiérarchie des packages
    • Sous-dossiers individuels pour css, images, js, etc.
  • Dossier principal contenant appdef, index, main .py ?

    • Sous-dossier pour le code + les modèles. De cette façon, j'ai la classe de gestionnaire juste à côté du modèle, car à ce stade, j'ajoute de nombreuses fonctionnalités, donc les modifications apportées à l'une signifient des modifications à l'autre. Encore une fois, dois-je avoir ce nom de dossier être le premier package nom pour mes classes ? Je voudrais que le dossier soit "src", mais je ne veux pas que mes classes soient "src.WhateverPage"

Y a-t-il une meilleure pratique ? Avec Django 1.0 à l'horizon, y a-t-il quelque chose que je peux faire maintenant pour améliorer ma capacité à l'intégrer lorsqu'il deviendra le moteur de template officiel de GAE ? Je commencerais simplement à essayer ces choses et à voir ce qui semble mieux, mais le support de refactoring de pyDev ne semble pas très bien gérer les déplacements de paquets, donc ce sera probablement une tâche non triviale pour que tout cela fonctionne à nouveau.