J'ai lancé une application dans Google App Engine dès sa sortie, pour jouer avec la technologie et travailler sur un projet pour animaux de compagnie auquel je pensais depuis longtemps mais que je n'avais jamais réussi à démarrer. Le résultat est BowlSK . Cependant, au fur et à mesure qu'il grandit et que des fonctionnalités ont été ajoutées, il est devenu vraiment difficile de garder les choses organisées - principalement en raison du fait qu'il s'agit de mon premier projet python, et je n'en savais rien jusqu'à ce que je commence à 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 sous-répertoire
Exemple:
http://www.bowlsk.com/ correspond à HomePage (package par défaut), modèle à "index.html"
http://www.bowlsk.com/games/view-series.html?series=7130 correspond à ViewSeriesPage (encore une fois, package par défaut), modèle à "games / view-series.html"
C'est dégueulasse. Comment restructurer? J'avais 2 idées:
Dossier principal contenant: appdef, index, main.py?
- Sous-dossier pour le code. Cela doit-il être mon premier colis?
- 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 code + modèles. De cette façon, j'ai la classe de gestionnaire juste à côté du modèle, car à ce stade, j'ajoute beaucoup de fonctionnalités, donc les modifications apportées à l'une signifient des modifications à l'autre. Encore une fois, dois-je avoir ce nom de dossier comme premier nom de package pour mes classes? Je voudrais que le dossier soit "src", mais je ne veux pas que mes classes soient "src.WwhatPage"
Existe-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é à m'intégrer avec celui-ci lorsqu'il deviendra le moteur officiel de création de modèles GAE? Je commencerais simplement à essayer ces choses et à voir ce qui me semble le mieux, mais le support de refactoring de pyDev ne semble pas gérer très bien les mouvements de paquets, donc ce sera probablement une tâche non triviale de remettre tout cela en marche.
la source
Ma mise en page habituelle ressemble à ceci:
__init__.py
- fonctionnalité commune, y compris une classe de base de gestionnaire de requêtesJe peux fournir des exemples de ce à quoi mes contrôleurs app.yaml, request.py, lib / init .py et exemples ressemblent, si ce n'est pas clair.
la source
J'ai implémenté un modèle standard de moteur d'application Google aujourd'hui et l'ai vérifié sur github. C'est dans le sens décrit par Nick Johnson ci-dessus (qui travaillait pour Google).
Suivez ce lien gae-passe-partout
la source
Je pense que la première option est considérée comme la meilleure pratique. Et faites du dossier de code votre premier package. Le projet Rietveld développé par Guido van Rossum est un très bon modèle pour apprendre. Jetez-y un œil: http://code.google.com/p/rietveld
En ce qui concerne Django 1.0, je vous suggère de commencer à utiliser le code du tronc Django au lieu du GAE intégré au port django. Encore une fois, regardez comment cela se fait à Rietveld.
la source
J'aime webpy , je l'ai donc adopté comme cadre de création de modèles sur Google App Engine.
Mes dossiers de paquets sont généralement organisés comme ceci:
Voici un exemple.
la source
Je ne suis pas tout à fait au courant des dernières meilleures pratiques, et cetera, en ce qui concerne la mise en page du code, mais lorsque j'ai créé ma première application GAE, j'ai utilisé quelque chose le long de votre deuxième option, où le code et les modèles sont côte à côte.
Il y avait deux raisons à cela - l'une, cela gardait le code et le modèle à proximité, et deuxièmement, la disposition de la structure du répertoire imitait celle du site Web - ce qui (pour moi) me permettait de me souvenir un peu plus où tout était.
la source