我在Google App Engine中启动了一个应用程序,当它出现时,玩这项技术并开展一个我一直在考虑的宠物项目,但是从来没有开始过。结果是BowlSK。然而,随着它的发展和功能的增加,它变得非常难以保持组织 - 主要是因为这是我的第一个python项目,在我开始工作之前我对此一无所知。
我有什么:
例:
http://www.bowlsk.com/映射到HomePage(默认包),模板位于“index.html”
http://www.bowlsk.com/games/view-series.html?series=7130映射到ViewSeriesPage(再次,默认包),模板位于“games / view-series.html”
这很讨厌。我该如何重组?我有两个想法:
主文件夹包含:appdef,indexes,main.py?
包含appdef,index,main.py?
的主文件夹有最好的做法吗?随着Django 1.0即将到来,当它成为官方的GAE模板引擎时,我现在能做些什么来提高我与它集成的能力?我只是开始尝试这些东西,看看哪个看起来更好,但是pyDev的重构支持似乎并没有很好地处理包移动,所以重新开始工作可能是一件非常重要的任务。
答案 0 :(得分:104)
首先,我建议您查看“Rapid Development with Python, Django, and Google App Engine”
GvR描述了他slide presentation第10页的一般/标准项目布局。
在这里,我将从该页面发布一个稍微修改过的版面布局/结构。我自己也非常关注这种模式。您还提到您在使用包时遇到问题。只需确保每个子文件夹都有一个__init__.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)
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")
from google.appengine.ext import db
class SampleModel(db.Model):
我认为这种布局适用于新的和相对中小型项目。对于较大的项目,我建议将视图和模型分解为拥有自己的子文件夹,例如:
答案 1 :(得分:16)
我通常的布局看起来像这样:
__init__.py
- 常用功能,包括请求处理程序基类如果不清楚,我可以提供我的app.yaml,request.py,lib / init .py和示例控制器的示例。
答案 2 :(得分:11)
我今天实施了一个谷歌应用引擎样板,并在github上进行了检查。这与上面的尼克·约翰逊(曾经为谷歌工作过)所描述的一致。
请点击此链接gae-boilerplate
答案 3 :(得分:7)
我认为第一种选择被认为是最佳做法。并将代码文件夹作为您的第一个包。由Guido van Rossum开发的Rietveld项目是一个非常好的模型。看看它:http://code.google.com/p/rietveld
关于Django 1.0,我建议你开始使用Django中继代码而不是内置django端口的GAE。再次,看看它是如何在Rietveld中完成的。
答案 4 :(得分:3)
我喜欢webpy所以我在Google App Engine上将其作为模板框架使用 我的包文件夹通常如下组织:
app.yaml
application.py
index.yaml
/app
/config
/controllers
/db
/lib
/models
/static
/docs
/images
/javascripts
/stylesheets
test/
utility/
views/
Here就是一个例子。
答案 5 :(得分:1)
关于代码布局,我并不完全了解最新的最佳实践等等,但是当我完成第一个GAE应用程序时,我使用了第二个选项,其中代码和模板紧挨着海誓山盟。
这有两个原因 - 一个是它保持代码和模板附近,其次,我的目录结构布局模仿了网站 - 使它(对我来说)更容易记住一切都在哪里。