
Ξεκίνησα μια εφαρμογή στο Google App Engine με το δικαίωμα, όταν βγήκε, για να παίξει με την τεχνολογία και την εργασία σε ένα κατοικίδιο ζώο έργο που είχα σκεφτεί για πολύ καιρό, αλλά ποτέ δεν πάρει γύρω από την εκκίνηση. Το αποτέλεσμα είναι [BowlSK](http://www.bowlsk.com) . Ωστόσο, δεδομένου ότι έχει αυξηθεί και έχουν χαρακτηριστικά έχουν προστεθεί, έχει πάρει πολύ δύσκολο να κρατήσει τα πράγματα οργανωμένα - κυρίως λόγω του γεγονότος ότι πρόκειται για το πρώτο έργο python μου, και εγώ δεν ξέρω τίποτα γι 'αυτό μέχρι που άρχισε να εργάζεται.


Τι έχω:


* Κύρια Επίπεδο περιέχει:
	+ όλα τα .py αρχεία (δεν ξέρουν πώς να κάνουν τα πακέτα εργασίας)
	+ όλα τα .html πρότυπα για τις κύριες σελίδες επίπεδο
* υποκατάλογοι:
	+ ξεχωριστούς φακέλους για CSS, εικόνες, js, κ.λπ.
	+ φακέλους που κατέχουν .html πρότυπα για τις διευθύνσεις URL subdirecty τύπου


Παράδειγμα:   

<http://www.bowlsk.com/> χάρτες στην αρχική σελίδα (default πακέτο), το πρότυπο στο «index.html»   

<http://www.bowlsk.com/games/view-series.html?series=7130> χάρτες για να ViewSeriesPage (και πάλι, προεπιλογή πακέτο), το πρότυπο σε παιχνίδια / view-series.html


Είναι δυσάρεστο. Πώς μπορώ να αναδιαρθρώσει; Είχα 2 ιδέες:


* Κύρια Φάκελος που περιέχει: appdef, ευρετήρια, main.py;


	+ Υποφάκελο για τον κωδικό. Μήπως αυτό πρέπει να είναι το πρώτο μου πακέτο;
	+ Υποφάκελο για πρότυπα. ιεραρχία φακέλου θα ταιριάζει με το πακέτο ιεραρχία
	+ Ατομική υποφακέλους για CSS, εικόνες, js, κ.λπ.
* Κύρια Φάκελος που περιέχει appdef, ευρετήρια, main.py;


	+ Υποφάκελο για πρότυπα κωδικό +. Με αυτό τον τρόπο έχω την τάξη χειριστή δίπλα στο πρότυπο, διότι σε αυτό το στάδιο, είμαι προσθέτοντας πολλά χαρακτηριστικά, έτσι ώστε τροποποιήσεις σε μία μέση τροποποιήσεις στο άλλο. Και πάλι, μπορώ να έχω αυτό το όνομα φακέλου είναι το πρώτο όνομα του πακέτου για τα μαθήματά μου; Θα ήθελα το φάκελο για να «src», αλλά δεν θέλω τάξεις μου να είναι «src.WhateverPage»


Είναι μια βέλτιστη πρακτική εκεί; Με Django 1,0 στον ορίζοντα, είναι κάτι που μπορώ να κάνω τώρα για να βελτιώσει την ικανότητά μου να ενσωματωθούν με το πότε γίνεται η επίσημη μηχανή προτύπων GAE εκεί; Θα ήθελα απλώς να ξεκινήσει την προσπάθεια αυτά τα πράγματα, και να δει που φαίνεται καλύτερα, αλλά η στήριξη refactoring pyDev δεν φαίνεται να χειριστεί το πακέτο κινείται πολύ καλά, γι 'αυτό κατά πάσα πιθανότητα θα είναι μια μη τετριμμένη καθήκον να πάρετε όλα αυτά να λειτουργούν ξανά.

 
δομή του έργου για τη μηχανή της Google App
===========================================



Κατ 'αρχάς, θα ήθελα να σας προτείνω να ρίξετε μια ματιά στο « [Ταχεία ανάπτυξη με την Python, Django, και το Google App Engine](http://sites.google.com/site/io/rapid-development-with-python-django-and-google-app-engine) »


GVR περιγράφει ένα γενικό / τυπική διάταξη έργο στη σελίδα 10 του [παρουσίαση διαφανειών](http://sites.google.com/site/io/rapid-development-with-python-django-and-google-app-engine/rapid_development_with_django_gae.pdf?attredirects=0) . 


Εδώ θα δημοσιεύσετε μια ελαφρώς τροποποιημένη εκδοχή της διάταξης / τη δομή από αυτή τη σελίδα. Έχω λίγο πολύ ακολουθούν αυτό το μοτίβο τον εαυτό μου. Αναφέρατε επίσης να είχε πρόβλημα με τα πακέτα. Απλά βεβαιωθείτε ότι καθένα από τα επιμέρους φακέλους σας έχει ένα αρχείο \_\_init\_\_.py. Είναι εντάξει, αν αδειάσει της.


στερεότυπο αρχεία
-----------------


* Αυτά τα ελάχιστα διαφέρουν μεταξύ των έργων
* app.yaml: απευθείας όλα τα μη-στατική αιτήσεων main.py
* main.py: η προετοιμασία του app και να το στείλετε όλες τις αιτήσεις


Έργο lay-out
------------


* στατική / *: στατικά αρχεία? εξυπηρετείται άμεσα από Μηχανή App
* . MyApp / * py: app-ειδικό κωδικό python
	+ views.py, models.py, tests.py, \_\_init\_\_.py, και πολλά άλλα
* . Templates / * html: πρότυπα (. Ή MyApp / templates / * html)


Εδώ είναι μερικά παραδείγματα κώδικα που μπορούν να βοηθήσουν, καθώς:


main.py
-------



```
import wsgiref.handlers

from google.appengine.ext import webapp
from myapp.views import *

application = webapp.WSGIApplication([
  ('/', IndexHandler),
  ('/foo', FooHandler)
], debug=True)

def main():
  wsgiref.handlers.CGIHandler().run(application)

```

MyApp / views.py
----------------



```
import os
import datetime
import logging
import time

from google.appengine.api import urlfetch
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import webapp
from models import *

class IndexHandler(webapp.RequestHandler):
  def get(self):
    date = "foo"
    # Do some processing        
    template_values = {'data': data }
    path = os.path.join(os.path.dirname(__file__) + '/../templates/', 'main.html')
    self.response.out.write(template.render(path, template_values))

class FooHandler(webapp.RequestHandler):
  def get(self):
    #logging.debug("start of handler")

```

MyApp / models.py
-----------------



```
from google.appengine.ext import db

class SampleModel(db.Model):

```

Νομίζω ότι αυτή η διάταξη λειτουργεί μεγάλο για τα νέα και σχετικά μικρού και μεσαίου μεγέθους έργα. Για τα μεγάλα έργα θα ήθελα να προτείνω σπάζοντας τις απόψεις και τα μοντέλα για να έχουν τη δική τους υπο-φακέλους με κάτι σαν:


Έργο lay-out
------------


* στατική /: στατικά αρχεία? εξυπηρετείται άμεσα από Μηχανή App
	+ js / *. js
	+ images / * gif |. png | jpg
	+ CSS / *. css
* / MyApp: δομή app
	+ μοντέλα / *. py
	+ θέα / *. py
	+ δοκιμών / *. py
	+ . Templates / * html: πρότυπα

 

Δεν είμαι απόλυτα ενημερωμένοι για τις τελευταίες βέλτιστες πρακτικές, κ.λπ., όταν πρόκειται για διάταξη κώδικα, αλλά όταν έκανα την πρώτη αίτησή μου GAE, χρησιμοποίησα κάτι μαζί δεύτερη επιλογή σας, όπου ο κώδικας και τα πρότυπα είναι δίπλα ο ένας τον άλλο.


Υπήρξε δύο λόγοι γι 'αυτό - ένα, κράτησε τον κωδικό και το πρότυπο γύρω από το ξενοδοχείο, και δεύτερον, είχα τη διάταξη δομή καταλόγου μιμείται εκείνη του δικτυακού τόπου - καθιστώντας (για μένα) είναι λίγο πιο εύκολο πάρα πολύ να θυμάστε, όπου τα πάντα ήταν.

 

Νομίζω ότι η πρώτη επιλογή θεωρείται η καλύτερη πρακτική. Και κάνει ο κώδικας φάκελο πρώτο πακέτο σας. Το έργο Rietveld που αναπτύχθηκε από τον Guido van Rossum είναι ένα πολύ καλό μοντέλο για να μάθουν από. Ρίξτε μια ματιά σε αυτό: <http://code.google.com/p/rietveld>


Όσον αφορά Django 1.0, σας προτείνω να αρχίσετε να χρησιμοποιείτε τον κωδικό κορμό Django αντί του GAE ενσωματωμένη θύρα Django. Και πάλι, ρίξτε μια ματιά στο πώς γίνεται στην Rietveld.

 

συνήθη διάταξη μου μοιάζει κάπως έτσι:


* app.yaml
* index.yaml
* request.py - περιέχει τη βασική εφαρμογή WSGI
* lib
	+ `__init__.py` - κοινή λειτουργικότητα, συμπεριλαμβανομένης μιας κατηγορίας διαχειριστή αιτήσεων βάσης
* ελεγκτές - περιέχει όλα τα χειρίζονται. request.yaml εισάγει αυτά.
* πρότυπα
	+ όλα τα πρότυπα Django, που χρησιμοποιούνται από τους ελεγκτές
* μοντέλο
	+ όλες οι κατηγορίες μοντέλο αποθήκευσης δεδομένων
* στατικός
	+ στατικά αρχεία (CSS, εικόνες, κλπ). Αντιστοιχίζονται με / στατική από app.yaml


Μπορώ να παρέχουν παραδείγματα του τι app.yaml μου, request.py, lib / **init** .py, και οι ελεγκτές δείγμα μοιάζουν, αν αυτό δεν είναι σαφές.

 

Μου αρέσει [webpy](http://webpy.org/) έτσι έχω υιοθετήσει ως πλαίσιο υφής στο Google App Engine.   

Οι φάκελοι πακέτο μου συνήθως οργανώνονται ως εξής:



```
app.yaml
application.py
index.yaml
/app
   /config
   /controllers
   /db
   /lib
   /models
   /static
        /docs
        /images
        /javascripts
        /stylesheets
   test/
   utility/
   views/

```

[Εδώ](http://github.com/systempuntoout/stackprinter) είναι ένα παράδειγμα.

 

Θα εφαρμοστεί ένα google εφαρμογή στερεότυπο του κινητήρα σήμερα και ελέγχεται το στο GitHub. Αυτό είναι σύμφωνα με τις κατευθύνσεις που περιγράφονται από τον Nick Johnson παραπάνω (που χρησιμοποιείται για να εργαστεί για το Google).


Ακολουθήστε αυτό το σύνδεσμο [GAE-στερεότυπο](https://github.com/droot/gae-boilerplate)

 