gpt4 book ai didi

python - Google App Engine 的项目结构

转载 作者:IT老高 更新时间:2023-10-28 21:05:06 31 4
gpt4 key购买 nike

我在 Google App Engine 推出时就在它中启动了一个应用程序,以使用该技术并从事一个我想了很长时间但一直没有开始的宠物项目。结果是BowlSK .然而,随着它的发展和功能的增加,让事情井井有条变得非常困难——主要是因为这是我的第一个 python 项目,在我开始工作之前我对它一无所知。

我有什么:

  • 主层包含:
    • 所有 .py 文件(不知道如何使包工作)
    • 主要页面的所有 .html 模板
  • 子目录:
    • 为 css、图片、js 等提供单独的文件夹。
    • 包含子目录类型 url 的 .html 模板的文件夹

示例:
http://www.bowlsk.com/映射到主页(默认包),模板位于“index.html”
http://www.bowlsk.com/games/view-series.html?series=7130映射到 ViewSeriesPage(同样,默认包),模板位于“games/view-series.html”

真恶心。我该如何重组?我有两个想法:

  • 主文件夹包含:appdef、indexes、main.py?

    • 代码的子文件夹。这必须是我的第一个包裹吗?
    • 模板的子文件夹。文件夹层次结构将匹配包层次结构
    • css、images、js 等的单独子文件夹
  • 包含 appdef、索引、main.py 的主文件夹?

    • 代码+模板的子文件夹。这样我在模板旁边就有了处理程序类,因为在这个阶段,我添加了很多特性,所以对一个的修改意味着对另一个的修改。同样,我是否必须将此文件夹名称作为我的类(class)的第一个包名称?我希望文件夹是“src”,但我不希望我的类是“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 等
  • 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):

我认为这种布局非常适合新的和相对中小型的项目。对于较大的项目,我建议将 View 和模型拆分为拥有自己的子文件夹,例如:

项目布局

  • static/:静态文件;由 App Engine 直接提供
    • js/*.js
    • 图片/*.gif|png|jpg
    • css/*.css
  • myapp/: 应用结构
    • 模型/*.py
    • views/*.py
    • 测试/*.py
    • 模板/*.html:模板

关于python - Google App Engine 的项目结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48458/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com