2012-03-03 28 views
5

¿Hay algún tutorial o ejemplos de código relacionados con la implementación de AJAX para GAE + Python2.7 + webapp2.GAE + Python2.7 + webapp2 + AJAX

He tratado de seguir las instrucciones siguientes:

http://code.google.com/appengine/articles/rpc.html

pero recibo el siguiente error:

Traceback (most recent call last): 
    File "E:\dev\workspace\test\webapp2.py", line 1536, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "E:\dev\workspace\test\webapp2.py", line 1530, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "E:\dev\workspace\test\webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "E:\dev\workspace\test\webapp2.py", line 1101, in __call__ 
    handler = self.handler(request, response) 
TypeError: __init__() takes exactly 1 argument (3 given) 

Hay otra discusión similar aquí:

Google App Engine Python Protorpc Error: __call__() takes exactly 1 argument (3 given)

él res es mi código del ejemplo de Specialscope:

main.py

from BaseHandler import BaseHandler 
from google.appengine.ext import blobstore 
from google.appengine.ext.webapp import blobstore_handlers 
import logging 
from google.appengine.api import files 
from google.appengine.api import images 
import json 
import webapp2 

class FileuploadHandler(BaseHandler): 
    def get(self): 
    blobstore.create_upload_url('/static') 
    context={} 
    self.render_response("uploader.html",**context) 
class FileDownloadHandler(blobstore_handlers.BlobstoreUploadHandler,BaseHandler): 
    def post(self): 
    upload_files=self.request.POST 
    #image=upload_files['file'] 
    logging.error(upload_files) 
    keys=upload_files.keys() 
    imageurls=[] 
    for key in keys: 
     if key.find("uploadimage")!=-1: 
     image=upload_files[key] 
     file_name=files.blobstore.create(mime_type='image/jpg') 
     with files.open(file_name,'a') as f: 
      f.write(image.value) 
     files.finalize(file_name) 
     blob_key=files.blobstore.get_blob_key(file_name) 
     imageurls.append(images.get_serving_url(blob_key)) 
    context={} 
    context['imagelinks']=imageurls 
    self.response.write(json.dumps(context)) 

app = webapp2.WSGIApplication([ 
     ('/upload',      FileuploadHandler), 
     ('/download',     FileDownloadHandler), 
     ], debug = True)  

BaseHandler.py

import webapp2 
import os 

from webapp2_extras import jinja2 
from google.appengine.ext import db 


class BaseHandler(webapp2.RequestHandler): 

    @webapp2.cached_property 
    def jinja2(self): 
     # Returns a Jinja2 renderer cached in the app registry. 
     return jinja2.get_jinja2(app=self.app) 

    def render_response(self, _template, **context): 
     # Renders a template and writes the result to the response. 
     rv = self.jinja2.render_template(_template, **context) 
     self.response.write(rv) 

Respuesta

3

El seguimiento de pila sugiere que tiene una asignación de dirección URL en su WSGIApplication que tiene un grupo, pero no hay un controlador con los argumentos correspondientes.

Si tiene

(r'/foo/(\s+)/(\s+)', FooHandler), 

entonces usted necesita

class FooHandler(webapp2.RequestHandler): 
    def get(self, arg1, arg2): 
    ... 

El médico que está utilizando es anterior a Python 2.7 apoyo por varios años. Si estuviese en su posición, me sentiría tentado de que la aplicación funcione primero en Python 2.5 y luego en el puerto 2.7.

0

Tengo ejemplo de código para AJAX Cargador de imágenes para GAE + Python2.7 aquí, http://verysimplescripts.blogspot.com/

+0

Gracias por el ejemplo Harendra, pero recibo de error 404 cuando intento subir archivos. ¿Algunas ideas? – MaxHash

+0

puede publicar su código incluyendo rutas. – specialscope

+0

He agregado el código a mi pregunta. ¡Gracias! – MaxHash

-1

El problema está aquí:

import webapp2 

app = webapp2.WSGIApplication([ 
     ('/upload',      FileuploadHandler), 
     ('/download',     FileDownloadHandler), 
     ], debug = True)  

No se puede utilizar para construir webapp2.WSGIApplication su aplicación , no entiende a protorpc. En su lugar, hacer esto:

from protorpc.wsgi import service 

app = service.service_mappings([ 
     ('/upload',      FileuploadHandler), 
     ('/download',     FileDownloadHandler), 
     ])  
+0

protorpc es el camino a seguir, pero es nuevo y aún experimental y requiere mucho más que su fragmento de código. Los documentos están aquí https://developers.google.com/appengine/docs/python/tools/protorpc/ pero a día de hoy, los ejemplos tienen muchos errores y no están claros, pero puede hacer que funcione si depura los ejemplos tú mismo. He publicado las correcciones que hice para que el ejemplo del libro de visitas funcione en el grupo de google para protorpc. – dansalmo

Cuestiones relacionadas