2010-11-20 10 views
7

Próbuję wykonać proste przekierowanie po zalogowaniu użytkownika. Pomyślałem, że mogę użyć metody "Location: ...", ale to nie działa.Przekierowanie użytkownika w języku Python + Google App Engine

class MainPage(webapp.RequestHandler): 
    def get(self): 

     ip = self.request.remote_addr 
     log = Log() 
     log.ip_address = ip 
     log.put() 
     print "Location:http://www.appurl.com" 
+0

w jaki sposób przekierowanie będzie zawierało polecenie drukowania? – crodjer

+2

jak wzywanie mojej głupiej próby pomógł mi? –

+2

Nie jest w żaden sposób głupi, musisz zacząć od czegoś i faktycznie próbowałem tego samego, kiedy po raz pierwszy zacząłem na AppEngine. Dobrą wiadomością jest to, że Google dostarcza świetną dokumentację. :) – Alex

Odpowiedz

14

RequestHandler ma redirect() metody, które można wykorzystać. Ma dwa parametry, z których pierwszy to adres URL do przekierowania, a drugi - wartość logiczna. Jeśli przekażemy wartość true, wysyła kod 301 w celu wskazania stałego przekierowania, jeśli nie przekazujemy mu jawnej wartości, przyjmuje wartość domyślną false i wysyła klientowi kod 302 wskazujący tymczasowe przekierowanie.

coś takiego:

class MainPage(webapp.RequestHandler): 
    def get(self): 

     ip = self.request.remote_addr 
     log = Log() 
     log.ip_address = ip 
     log.put() 
     self.redirect("http://www.appurl.com") # replaced this -> print "Location:http://www.appurl.com" 
1

Inną opcją byłoby to zrobić bezpośrednio na appengine_config.py

czyli jeśli chcesz przekierować wszystko "http://www.google.com" można dodać następujące:

def webapp_add_wsgi_middleware(app): 

    return webapp.WSGIApplication([('/*', webapp.RedirectHandler.new_factory('http://www.google.com', permanent=True))], debug=True) 

tzn. Jeśli chcesz zrobić coś w oparciu o hosta, możesz:

def webapp_add_wsgi_middleware(app): 

    if 'mydomain.com' in os.environ.get('HTTP_HOST'): 
     return webapp.WSGIApplication([('/*', webapp.RedirectHandler.new_factory('http://www.google.com/', permanent=True))], 
    debug=True) 
    else: 
     return app