2012-03-03 11 views
5

Esistono tutorial o esempi di codice relativi all'implementazione AJAX per GAE + Python2.7 + webapp2.GAE + Python2.7 + webapp2 + AJAX

ho cercato di seguire le istruzioni riportate di seguito:

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

ma ho visualizzato il seguente errore:

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) 

C'è un'altra discussione simile qui:

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

lui res è il mio codice dall'esempio di 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) 

risposta

3

L'analisi dello stack suggerisce che si dispone di una mappatura URL nel WSGIApplication che ha un gruppo in esso, ma non c'è un gestore con gli argomenti corrispondenti.

Se hai

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

allora avete bisogno

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

Il dottore si sta utilizzando pre date Python 2.7 il supporto di diversi anni. Se fossi nella tua posizione, sarei tentato di far funzionare l'app prima su Python 2.5, quindi portarla a 2.7.

-1

Il problema è qui:

import webapp2 

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

Non è possibile utilizzare webapp2.WSGIApplication per costruire la vostra applicazione , non capisce protorpc. Invece, fare questo:

from protorpc.wsgi import service 

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

protorpc è la strada da percorrere ma è nuovo e ancora sperimentale e richiede molto più del tuo frammento di codice. I documenti sono qui https://developers.google.com/appengine/docs/python/tools/protorpc/ ma ad oggi gli esempi hanno molti errori e non sono chiari, ma puoi farlo funzionare se esegui il debug degli esempi te stesso. Ho pubblicato le correzioni apportate per ottenere l'esempio del guestbook per funzionare nel gruppo google per protorpc. – dansalmo