Ошибка в развернутом GAE RequestHandler с использованием Webapp2 - PullRequest
1 голос
/ 19 декабря 2011

Я использую инфраструктуру webapp2 в Google App Engine и получаю основную ошибку в одном из моих обработчиков запросов.

Приложение работает нормально в локальном экземпляре, но вызывает следующую трассировку в развернутой версии Google App Engine:

Вот код:

import os
from google.appengine.ext.webapp import template
import webapp2
import logging 

class MainHandler(webapp2.RequestHandler):
    def get(self):
        logging.info('hi there 34')
        template_values = {}
        self.response.out.write('hello world 4')
        path = os.path.join(os.path.dirname(__file__), 'index.html')

        ## This is the code that causes the bug ##
        self.response.out.write(template.render(path, template_values))
        ## ## ## ##

debug = os.environ.get('SERVER_SOFTWARE', '').startswith('Dev')

app = webapp2.WSGIApplication(
    [(r'/main', MainHandler)], 
    debug = debug)

def main():
    app.run()

ошибка трассировки:

Traceback (most recent call last):

File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", 
line 86, in run

self.finish_response()
File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", 
line 127, in finish_response

self.write(data)

File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", 
line 202, in write

assert type(data) is StringType,"write() argument must be string"

AssertionError: write() argument must be string

Что означает эта ошибка?

1 Ответ

2 голосов
/ 19 декабря 2011

Я думаю, что ответ не принимает данные Unicode, поэтому вам нужно кодировать сначала:

content = template.render(path, template_values)
self.response.out.write(content.encode('utf-8'))

Также я рекомендую Werkzeug. Это хорошо работает на appengine и делает жизнь намного проще. Он помогает работать с данными запросов и ответов, URL-маршрутизацией, обеспечивает исключения http, имеет отличный отладчик для автономной разработки и многое другое. Я думаю, что Werkzeug является обязательным условием для каждого разработчика Python в их наборе инструментов.

...