2009-05-08 14 views
19

Google uygulama motorunda (python) alt alanla nasıl çalışabilirim?Google uygulama motorunda alt alan adıyla çalışma

İlk etki alanı bölümünü almak ve bazı eylemler (işleyici) almak istiyorum.

Örnek:
          product.example.com -> ürünler işleyici göndermek
          user.example.com -> Kullanıcılar işleyici göndermek

Aslında, sanal yolu kullanarak şu kodum var:

application = webapp.WSGIApplication(
    [('/', IndexHandler), 
    ('/product/(.*)', ProductHandler), 
    ('/user/(.*)', UserHandler) 
    ] 

cevap

26

WSGIApplication, etki alanına dayalı olarak yönlendirilemiyor. Bunun yerine, bu gibi her alt alan adı için ayrı bir uygulama oluşturmanız gerekir:

applications = { 
    'product.example.com': webapp.WSGIApplication([ 
    ('/', IndexHandler), 
    ('/(.*)', ProductHandler)]), 
    'user.example.com': webapp.WSGIApplication([ 
    ('/', IndexHandler), 
    ('/(.*)', UserHandler)]), 
} 

def main(): 
    run_wsgi_app(applications[os.environ['HTTP_HOST']]) 

if __name__ == '__main__': 
    main() 

Alternatif olarak, birden fazla ana ele bilir kendi WSGIApplication alt sınıfı yazabiliriz.

+0

Teşekkür ederiz! Bu alt WSGIApplication'ın bir örneğim var mı? Python ile bildiriyorum ... – Zote

+0

Geçerli olanın kaynağına bakın http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/webapp/__init__ .py - ana bilgisayar adını dikkate almak için __call__ yönteminin değiştirilmesi oldukça basit olmalıdır. –

+0

Yukarıdaki kod, bir GAE uygulamasına bağlı alt alan adları ile birlikte üretimde çalışmıyor gibi görünüyor. Bunu herkes işe mi aldı? – kovshenin

2

Nick'in fikrini sevdim ama biraz farklı bir sorunum vardı. Belirli bir alt alanla eşleştirmek için biraz farklı bir şekilde ele almak istedim, ancak diğer tüm alt alanlar aynı şekilde ele alınmalıdır. İşte benim örneğim.

import os 

def main(): 
    if (os.environ['HTTP_HOST'] == "sub.example.com"): 
     application = webapp.WSGIApplication([('/(.*)', OtherMainHandler)], debug=True) 
    else: 
     application = webapp.WSGIApplication([('/', MainHandler),], debug=True) 

    run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 
İlgili konular