Google App Engine的项目结构

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我在GoogleAppEngine中启动了一个应用程序,当它问世时,我就开始使用这项技术,并致力于一个我已经思考了很长时间但从未开始的宠物项目。

我所拥有的:

  • 主要级别包括:
    • 所有.py文件(不知道如何使包工作)
    • 主级别页的所有.html模板

  • 子目录:
    • 为CSS,图像,js等单独的文件夹。
    • 保存子目录类型URL的.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的重构支持似乎不能很好地处理包移动,所以让所有这些工作重新开始可能是一项非常重要的任务。

提问于
用户回答回答于

样板文件

  • 这些在不同的项目中几乎不存在差异。
  • app.yaml:将所有非静态请求定向到main.py
  • py:初始化应用程序并发送所有请求

项目布局

  • 静态/**静态文件;直接由AppEngine提供
  • 我的应用程序/*.py:特定于应用程序的python代码,views.py,model s.py,tests.py,__依尼特__.py,还有更多
  • 模板/模板*.html:模板(或myapp/模板/*.html)

下面是一些可能也有帮助的代码示例:

主.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/model s.py

from google.appengine.ext import db

class SampleModel(db.Model):

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

项目布局

  • 静态/:静态文件;直接由AppEngine提供
    • 联合材料/*.js
    • 图像/*.gif png jpg
    • CSS/*.css

  • myapp/:APP结构
    • 模型/*.py
    • 意见/*.py
    • 测试/*.py
    • 模板/模板*.html:模板

用户回答回答于

常的布局看起来像这样: app.yaml index.yaml request.py - 包含基本的WSGI应用程序 LIB __init__.py - 通用功能,包括请求处理程序基类 控制器 - 包含所有处理程序。 request.yaml导入这些。 模板 控制器使用的所有django模板 模型 所有数据存储模型类 静态的 静态文件(CSS,图像等)。 通过app.yaml映射到/静态 如果不明确,我可以提供我的app.yaml,request.py,lib / init.py和示例控制器的样例。

扫码关注云+社区