Во-первых, я бы посоветовал вам взглянуть на " Rapid Development с Python, Django и Google App Engine "
GvR описывает общий / стандартный макет проекта на странице 10 его слайд-презентации .
Здесь я выложу слегка измененную версию макета / структуры с этой страницы. Я в значительной степени следую этой модели сам. Вы также упомянули, что у вас были проблемы с пакетами. Просто убедитесь, что в каждой из ваших подпапок есть файл __init__.py. Это нормально, если он пуст.
Файлы Boilerplate
- Они едва различаются между проектами
- app.yaml: направлять все нестатические запросы в main.py
- main.py: инициализировать приложение и отправить ему все запросы
План проекта
- static / *: статические файлы; обслуживается непосредственно App Engine
- myapp / *. Py: специфичный для приложения код 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):
Я думаю, что этот макет отлично работает для новых и относительно небольших и средних проектов. Для более крупных проектов я бы предложил разбить представления и модели на собственные подпапки, например:
План проекта
- статические /: статические файлы; обслуживается непосредственно App Engine
- JS / *. JS
- изображения / * GIF |. PNG | JPG
- CSS / *. CSS
- myapp /: структура приложения
- модели / *. Py
- вид / *. Py
- Тесты / *. Py
- templates / *. Html: templates