Google App Engine için proje yapısı

oy
117

Ben uzun zamandır düşünüyordum ama asla başlangıç için kazanılmış olan bir hayvan proje üzerinde teknoloji ve iş ile oynamak için dışarı çıktı sağ ben Google App Engine bir uygulama başladı. Sonucudur BowlSK . Ancak, büyüdü ve özellikler eklendi gibi şeyler organize tutmak gerçekten zor kazanılmış - başlıca nedeni bu benim ilk piton projesi olması nedeniyle, ben çalışmaya başlayana kadar bu konuda hiçbir şey bilmiyordu.

Neyim var:

  • Ana düzeyi içerir:
    • tüm .py dosyaları (paketler şekilde nasıl bilmiyordum)
    • Ana düzey sayfaları için tüm .html şablonları
  • Alt Dizinler:
    • css, resim, js, vb için ayrı klasörler
    • subdirecty-tür URL'ler .html şablonları tutun klasörleri

Örnek:
http://www.bowlsk.com/ Ana Sayfaya index.html nde (varsayılan paketi), şablon eşler
http://www.bowlsk.com/games/view-series.html?series=7130 için harita ViewSeriesPage (yine varsayılan paketi), oyunlar / görünüm-series.html da şablon

O iğrenç. Nasıl yeniden yapılandırmak mı? 2 Fikir vardı:

  • appdef, endeksler, main.py: Ana klasör içeren?

    • kodu için alt klasör. Bu benim ilk paket olmak zorunda mı?
    • şablonlar için alt klasör. Klasör hiyerarşi paketi hiyerarşi eşleşecektir
    • css, resim, js, vb için bireysel alt klasörler
  • appdef, dizinler, main.py Ana klasör içeren?

    • kodu + şablonları için alt klasör. Bu aşamada, ben birçok özellik ekleyerek olduğum için bir ortalama değişiklikler yapılan değişiklikler öylesine diğerine, hemen yanındaki şablona işleyici sınıf var ben Bu şekilde. Yine, bu klasör adı benim sınıflar için ilk paket adı olmak zorunda gerekiyor? Ben src olmasını klasörü istiyorum, ama benim sınıfları src.WhateverPage olmak istemiyoruz

en iyi yöntem var mı? Ufukta Django 1.0 ile bunun resmi GAE çiftleşmiş motoru olduğunda onunla entegre yeteneğini geliştirmek için şimdi yapabileceğimiz bir şey var mı? Sadece bu şeyler çalışırken başlayın ve daha iyi görünüyor, ama pyDev en üstlenmeden destek paketi çok iyi hamle işlemek için görünmüyor, yüzden büyük olasılıkla yeniden çalışmaya tüm bu almak için önemsiz olmayan bir görev olacaktır olacaktır.

Oluştur 07/09/2008 saat 13:08
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
1

Tamamen en son iyi uygulamalar tarihten, vesaire o kod düzeni söz konusu olduğunda kadar değilim, ama benim ilk GAE'nin uygulamasını yaptım, ben kod ve şablonları birbirinden yanındadır ikinci seçenek, birlikte bir şeyler kullanılır.

Bunun iki nedeni vardı - bir, yakındaki kodu ve şablonu tuttu, ve ikinci olarak, ben dizin yapısı düzeni web sitesinin bu taklit vardı - her şey olduğu yerde biraz daha kolay çok hatırlamak (benim için) yapma.

Cevap 07/09/2008 saat 13:25
kaynak kullanıcı

oy
6

İlk seçenek en iyi uygulama olarak kabul edilir düşünüyorum. Ve kod İlk paket klasörü olun. Guido van Rossum tarafından geliştirilen Rietveld proje öğrenmek için çok iyi bir modeldir. Ona bir göz var: http://code.google.com/p/rietveld

Django 1.0 ile ilgili olarak, ben yerine Django limanda inşa GAE Django gövde kodu kullanarak başlamanızı öneririz. Yine, Rietveld nasıl yapıldığını bir göz.

Cevap 15/09/2008 saat 21:11
kaynak kullanıcı

oy
102

Birincisi, sana "bir göz öneririm Python, Django, ve Google App Engine Rapid Development "

GvR yaptığı 10. sayfasında genel / standart proje düzenini açıklar slayt sunumu .

İşte o sayfadan düzen / yapının biraz değiştirilmiş bir sürümü göndeririz. Hemen hemen bu desenini kendim izleyin. Ayrıca paketler sorun vardı bahsettiniz. Sadece alt klasörlerin her __init__.py dosya olduğundan emin olun. onun boş eğer Tamam.

demirbaş dosyaları

  • Bunlar zor projeler arasında değişir
  • app.yaml: main.py tüm statik olmayan istekleri doğrudan
  • main.py: Uygulamayı başlatmak ve bunu tüm istekleri göndermek

Proje lay-out

  • statik / *: statik dosyalar; App Engine tarafından doğrudan sunulan
  • . Myapp / * py: Uygulamaya özel piton kodu
    • views.py, models.py, tests.py, __init__.py ve daha
  • . Şablonları / * html: şablonları (. Veya myapp / templates / * html)

De yardımcı olabilecek bazı kod örnekleri şunlardır:

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):

Bu düzen için yeni büyük ve orta ölçekli projeler için nispeten küçük işler düşünüyorum. Daha büyük projeler için ben böyle bir şeyle kendi alt klasörler için görüş ve modelleri kırma öneririm:

Proje lay-out

  • static /: statik dosyalar; App Engine tarafından doğrudan sunulan
    • js / *. js
    • images / * gif |. png | jpg
    • css / *. css
  • myapp /: Uygulama yapısı
    • Modeller / *. py
    • görünümler / *. py
    • Testler / *. py
    • . Şablonları / * html: şablonları
Cevap 16/09/2008 saat 07:10
kaynak kullanıcı

oy
15

Her zamanki düzeni şöyle görünür:

  • app.yaml
  • index.yaml
  • request.py - Temel WSGI uygulamasını içeriyor
  • lib
    • __init__.py - Bir istek işleyicisi temel sınıf dahil olmak üzere ortak işlevsellik
  • kontrolörleri - tüm işleyicileri içerir. request.yaml bu ithal ediyor.
  • şablonları
    • kontrolörler tarafından kullanılan tüm Django şablonları,
  • model
    • tüm veri deposu modeli sınıfları
  • statik
    • statik dosyaları (css, resim, vs.). app.yaml tarafından / statik eşleştirilmiş

Benim app.yaml, request.py, lib / ne örnekler sağlayabilir init bu açık değilse .py ve örnek kontrolörleri, benziyorsun.

Cevap 30/09/2008 saat 15:30
kaynak kullanıcı

oy
2

Sevdiğim webpy Google App Engine üzerinde şablon çerçeve halinde kabul ettik böylece.
Benim paket klasörler genelde böyle düzenlenmiştir:

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

İşte bir örnek.

Cevap 23/06/2010 saat 19:30
kaynak kullanıcı

oy
10

Bugün bir google app motor klişe uygulanan ve github üzerinde kontrol etti. Bu (Google'da çalışmak üzere kullanılır) Yukarıdaki Nick Johnson tarafından açıklanan çizgisinde olduğunu.

Bu bağlantı izleyin gae-klişe

Cevap 21/09/2012 saat 16:07
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more