2013-12-13 3 views
1

Я пытался использовать GAE/Python, взяв примеры из книги «Использование Google App Engine». У меня есть пара проблем, работающих правильно, пока я не изменил основной файл python, когда начал получать пустую страницу браузера.Google App Engine - пустая страница в браузере, но без ошибок

Вход консоли

INFO  2013-12-13 21:17:34,568 module.py:617] default: "GET/HTTP/1.1" 200 - 
INFO  2013-12-13 21:17:34,737 module.py:617] default: "GET /favicon.ico HTTP/1.1" 200 - 

index.py

Я не уверен, что я пропускаю, но вот код питона.

import os 
import logging 
import wsgiref.handlers 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 


def doRender(handler, tname='index.html', values={}): 
    #Check if the template file tname exists 

    temp = os.path.join(os.path.dirname(__file__), 
     'template/' + tname) 
    if not os.path.isfile(temp): 
     return False 

    # If template file exisis, make a copy and add the path 
    newval = dict(values) 
    newval['path'] = handler.request.path 
    outstr = template.render(temp, newval) 
    handler.response.out.write(str(outstr)) 
    return True 


class LoginHandler(webapp.RequestHandler): 

    def get(self): 
     doRender(self, 'loginscreen.html') 

    def post(self): 
     acct = self.request.get('account') 
     pw = self.request.get('password') 
     logging.info('Checking account = '+acct+' pw='+pw) 

     if pw == '' or acct == '': 
      doRender(self, 'loginscreen.html', {'error': 'Please specify Account and Password'}) 
     elif pw == 'secret': 
      doRender(self, 'loggedin.html', {}) 
     else: 
      doRender(self, 'loginscreen.html', {'error': 'Incorrect password'}) 



class MainHandler(webapp.RequestHandler): 

    def get(self): 
     if doRender(self, self.request.path): 
      return 
     doRender(self, 'index.html') 




def main(): 
    application = webapp.WSGIApplication([ 
     ('/login', LoginHandler), 
     ('/.*', MainHandler)], 
     debug=True) 
    wsgiref.handlers.CGIHandler().run(application) 


if __name__ == '__main__': 
    main() 

Как вы можете видеть, консоль не сообщает об ошибке, но при просмотре в браузере пустой экран смотрит на меня. Я что-то упускаю?

+0

каково содержание вашего index.html? – brian

ответ

0

Прежде всего, я думаю, что учебник устарел, поскольку он по-прежнему использует webapp, и вам, вероятно, следует использовать webapp2.

Это, как говорится, ваш код обрабатывается как модуль App Engine, поэтому он ищет свойство с именем app (в старых версиях он был application, как указано в вашем коде). В вашем случае вы завернули это в функцию main(), что объясняет, почему он больше не работает.

Просто сделать свой код посмотреть, как это и должно быть в порядке:

import os 
import logging 
import wsgiref.handlers 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 


def doRender(handler, tname='index.html', values={}): 
#Check if the template file tname exists 

    temp = os.path.join(os.path.dirname(__file__), 
     'template/' + tname) 
    if not os.path.isfile(temp): 
     return False 

    # If template file exisis, make a copy and add the path 
    newval = dict(values) 
    newval['path'] = handler.request.path 
    outstr = template.render(temp, newval) 
    handler.response.out.write(str(outstr)) 
    return True 

class LoginHandler(webapp.RequestHandler): 

    def get(self): 
     doRender(self, 'loginscreen.html') 

    def post(self): 
     acct = self.request.get('account') 
     pw = self.request.get('password') 
     logging.info('Checking account = '+acct+' pw='+pw) 

     if pw == '' or acct == '': 
      doRender(self, 'loginscreen.html', {'error': 'Please specify Account and Password'}) 
     elif pw == 'secret': 
      doRender(self, 'loggedin.html', {}) 
     else: 
      doRender(self, 'loginscreen.html', {'error': 'Incorrect password'}) 

class MainHandler(webapp.RequestHandler): 

    def get(self): 
     if doRender(self, self.request.path): 
      return 
     doRender(self, 'index.html') 

app = webapp.WSGIApplication([ 
    ('/login', LoginHandler), 
    ('/.*', MainHandler)], 
    debug=True) 
+0

Thankx Brian. Я понимаю, что я должен использовать webapp2 и Jinja, но поскольку Im просто вникаю в это, я думал, что это имеет смысл, если я буду работать с примерами в книге. Я пробовал код, который вы предлагали, к сожалению, он все еще не работает. – Afloz

+0

Да, я понимаю, что вы хотите продолжать работу с вашей книгой, это было просто что-то, чтобы иметь в виду, что теперь мы используем webapp2. В любом случае, странно, что код не работает, он работает для меня в моей среде dev. Можете ли вы рассказать мне о структуре вашей рабочей папки? – brian

+0

Thankx Brian. Я отошел от книги. Я прочитал обзор, что он пронизан такими ошибками. Спасибо за помощь. – Afloz

Смежные вопросы