Google App Engine 的项目结构

我开始在谷歌应用程序引擎的应用程序出来的时候,玩的技术和工作的宠物项目,我已经考虑了很长时间,但从来没有抽出时间来启动。结果是 BowlSK。然而,随着它的发展和功能的增加,它已经变得非常难以保持组织性——主要是因为这是我的第一个 Python 项目,而且直到我开始工作之前我对它一无所知。

我所拥有的:

  • 主要层次包括:
    • Py 文件(不知道如何使包工作)
    • 主要级别页面的所有.html 模板
  • 子目录:
    • separate folders for css, images, js, etc.
    • 保存子目录类型 url 的.html 模板的文件夹

Example:
Http://www.bowlsk.com/ 地图至首页(预设套件) ,模板位于「 index.html 」
Http://www.bowlsk.com/games/view-series.html?series=7130 映射到 ViewSeriesPage (同样是默认包) ,模板位于“ games/view-series.html”

真恶心,我该怎么重组? 我有两个主意:

  • 主文件夹包含: appdef,index,Main.py?

    • Subfolder for code. Does this have to be my first package?
    • 模板的子文件夹。文件夹层次结构将匹配包层次结构
    • CSS、图像、 js 等的独立子文件夹。
  • 包含 appdef、索引、 Main.py 的主文件夹?

    • Subfolder for code + templates. This way I have the handler class right next to the template, because in this stage, I'm adding lots of features, so modifications to one mean modifications to the other. Again, do I have to have this folder name be the first package name for my classes? I'd like the folder to be "src", but I don't want my classes to be "src.WhateverPage"

有最佳实践吗?随着 Django 1.0的出现,当它成为官方的 GAE 模板引擎时,我现在是否可以做些什么来提高与它集成的能力?我会简单地开始尝试这些东西,看看哪个更好,但 pyDev 的重构支持似乎不能很好地处理包移动,所以让所有这些工作再次运行起来可能是一个非常重要的任务。

28101 次浏览

在代码布局方面,我并不完全了解最新的最佳实践等等,但是当我做我的第一个 GAE 应用程序时,我使用了第二个选项中的一些内容,其中代码和模板是紧挨着的。

这有两个原因-一,它保持代码和模板附近,其次,我有目录结构布局模仿的网站-使它(对我来说)更容易记住一切在哪里。

我认为第一个选项被认为是最佳实践。并使代码文件夹成为您的第一个包。吉多·范罗苏姆开发的 Rietveld 项目是一个很好的学习模式。看看它: http://code.google.com/p/rietveld

关于 Django 1.0,我建议您开始使用 Django 中继代码,而不是使用内置在 Django 端口中的 GAE。再看看 Rietveld 是怎么做的。

First, I would suggest you have a look at "使用 Python、 Django 和 Google App Engine 进行快速开发"

GvR 在他的 幻灯片演示的第10页描述了一个通用/标准的项目布局。

在这里,我将从该页面发布一个稍微修改过的布局/结构版本。我自己也是这样。你还提到你的包裹有问题。只要确保每个子文件夹都有 _ _ init _ _ 即可。Py 文件。如果是空的也没关系。

样本文件

  • 这些在不同的项目中几乎没有变化
  • app.yaml: direct all non-static requests to main.py
  • Py: 初始化应用程序并发送所有请求

项目布局

  • Static/* : 静态文件; 由 App Engine 直接提供
  • Myapp/* . py: 特定于 app 的 Python 代码
    • Py、 models.py、 tests.py、 _ _ init _ _. py 等等
  • Template/* . html: template (或 myapp/template/* . html)

Here are some code examples that may help as well:

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/: app 结构
    • 模特/* . py
    • 视图/* . py
    • 测试/* . py
    • 模板/* . html: 模板

我通常的布局是这样的:

  • App.yaml
  • Index.yaml
  • Py-包含基本的 WSGI 应用程序
  • Lib
    • __init__.py-公共功能,包括请求处理程序基类
  • 包含所有的处理程序。
  • 模板
    • 控制器使用的所有 django 模板
  • 模特
    • 所有的数据存储模型类
  • 静电干扰
    • 静态文件(css、图像等)

如果不清楚的话,我可以提供 app.yaml、 request.py、 lib/Init.py 和示例控制器的示例。

我喜欢 Webpy,所以我采用它作为谷歌应用程序引擎的模板框架。
我的包文件夹通常是这样组织的:

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

这里 是一个例子。

今天我实现了一个谷歌应用程序引擎样板,并在 github 上检查了它。这与上面尼克•约翰逊(Nick Johnson)(曾为谷歌工作)所描述的情况类似。

按照这个链接 gae-boilerplate