Google App Engine的项目结构

问题:

我在Google App Engine中发布了一个应用程序,当它出来,玩这个技术,并在一个宠物项目,我一直在想很久,但从来没有开始。结果是BowlSK。然而,随着它的增长和功能的增加,它变得非常难以保持组织 – 主要是因为这是我的第一个python项目,我不知道任何事情,直到我开始工作。
我拥有的:

  • 主要级别包含:

     

    • all .py files (didn’t know how to make packages work)
    • all .html templates for main level pages
  • 子目录:

     

    • separate folders for css, images, js, etc.
    • folders that hold .html templates for subdirecty-type urls

示例:
http://www.bowlsk.com/映射到HomePage(默认包),“index.html”
http://www.bowlsk.com/games/view-series.html?series=7130上的模板映射到ViewSeriesPage(再次是默认包),“games / view-series.html”
这很讨厌如何重组?我有两个想法:

  • 主文件夹包含:appdef,索引,main.py?
     

    • Subfolder for code. Does this have to be my first package?
    • Subfolder for templates. Folder heirarchy would match package heirarchy
    • Individual subfolders for css, images, js, etc.
  • 主文件夹包含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的重构支持似乎没有很好地处理包的移动,所以这可能是一个非常简单的任务,以使所有这一切再次工作。

回答:

首先,我建议你看看“Rapid Development with Python, Django, and Google App Engine
GvR描述了他的slide presentation第10页的一般/标准项目布局。
在这里,我将从该页面发布一个稍微修改版本的布局/结构。我很自然地遵循这种模式。你也提到你遇到麻烦的包。只需确保每个子文件夹都有一个__init__.py文件。没关系,如果它是空的。

锅炉文件

  • 项目之间几乎不一样
  • app.yaml:将所有非静态请求都引导到main.py
  • main.py:初始化应用并发送所有请求

项目布局

  • static / *:静态文件;由App Engine直接提供
  • myapp / *。py:应用程序特定的python代码

     

    • views.py, models.py, tests.py, __init__.py, and more
  • templates / *。html:templates(或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):

我认为这个布局对于新的和相对较小的到中等的项目是非常有用的。对于较大的项目,我建议将视图和模型分解为拥有自己的子文件夹,例如:

项目布局

  • static /:静态文件;由App Engine直接提供

     

    • js/*.js
    • images/*.gif|png|jpg
    • css/*.css
  • myapp /:app结构

     

    • models/*.py
    • views/*.py
    • tests/*.py
    • templates/*.html: templates

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Project structure for Google App Engine

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 4