2013-11-26 1 views
1

Я получаю следующую ошибку из моего скрипта cherrypy, который создается модулем отправки.Python Cherrypy: 500 ValueError: Обработчики страниц ДОЛЖНЫ возвращать байты

ValueError: Обработчики страниц ДОЛЖНЫ возвращать байты. Используйте tools.encode, если вы хотите вернуть unicode

Я включил tool.encode в свой конфиг, но я все еще получаю эту ошибку. Я разрешаю пользователям загружать контент через плагин jQuery Form. Любые мысли о том, почему я получаю эту ошибку?

Вот мой CherryPy файл:

class Root(object):  

@cherrypy.expose 
def index(self) 
    return open('/home/joestox/webapps/freelinreg_static/index.html') 

@cherrypy.expose 
def submit(self, myfile): 

    cherrypy.session['myfile'] = myfile 
    data_name = myfile.filename 

    #Send back to JQuery with Ajax 
    #Put in JSON form 
    data_name= json.dumps(dict(title = data_name)) 
    cherrypy.response.headers['Content-Type'] = 'application/json' 

    return data_name 



cherrypy.config.update({ 
    'tools.staticdir.debug': True, 
    'log.screen': True, 
    'server.socket_host': '127.0.0.1', 
    'server.socket_port': *****, 
    'tools.sessions.on': True, 
    'tools.encode.on': True, 
    'tools.encode.encoding': 'utf-8', 
}) 

config = { 
} 

cherrypy.tree.mount(Root(), '/', config=config) 
cherrypy.engine.start() 

HTML:

<!DOCTYPE html> 
    <html> 
     <head> 
      <script type='text/javascript' src='freelinreg_static/google.js'></script> 
      <script type='text/javascript' src='freelinreg_static/frontend.js'></script> 
      <script type='text/javascript' src='freelinreg_static/malsup.js'></script> 
     </head> 
     <body> 

     <form id="dataform" action="submit" method="post" enctype="multipart/form-data"> 
      <input type="file" name="myfile" id="myFile"/> 
      <input type="submit" id="data_submit" value="Continue"/> 
     </form>       

     </body> 
    </html> 

JQuery (frontend.js):

$(document).ready(function() { 
    (function() { 
     $('#dataform').ajaxForm({ 
      url: "submit", 
      success: function (data) { 
       var $a_var = data['title']; 
       $('body').append($a_var); 
      } 
     }); 
     return false; 
    })(); 
}); 

ответ

1

Я думаю, вы можете просто нужно изменить некоторые вещи , Попробуйте это ...

config = { 
} 

cherrypy.tree.mount(Root(), '/', config=config) 

cherrypy.config.update({ 
    'tools.staticdir.debug': True, 
    'log.screen': True, 
    'server.socket_host': '127.0.0.1', 
    'server.socket_port': *****, 
    'tools.sessions.on': True, 
    'tools.encode.on': True, 
    'tools.encode.encoding': 'utf-8' 
}) 

cherrypy.engine.start() 

Я думаю, потому что вы звонили конфиг = {} после команды обновления конфигурации вы уничтожив параметры обновления.

Кроме того, измените функцию отправить на это ...

@cherrypy.expose 
def submit(self, myfile): 

    cherrypy.session['myfile'] = myfile 
    data_name = myfile.filename 

    #Send back to JQuery with Ajax 
    #Put in JSON form 
    data_name= json.dumps(dict(title = data_name)) 

    #changed line 
    #cherrypy.response.headers['Content-Type'] = 'application/json' 

    return data_name 

Надеется, что это помогает.

+0

Спасибо за отзыв! Имеет большой смысл! К сожалению, я все еще получаю то же 500 ValueError. –

+1

Хорошо. Я обновил свой ответ с проверенным исправлением. –

+0

Это сработало! В любом случае отправить данные обратно в jQuery в качестве JSON dict еще? Теперь jQuery, похоже, не понимает, что это JSON dict. –