2012-03-03 16 views
5

Czy są jakieś tutoriale lub przykłady kodu związane z implementacją AJAX dla GAE + Python2.7 + webapp2.GAE + Python2.7 + webapp2 + AJAX

starałem się postępować zgodnie z instrukcjami poniżej:

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

ale pojawia się następujący błąd:

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) 

istnieje inna podobna dyskusja tutaj:

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

on res jest mój kodu z przykładu Specialscope za:

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) 

Odpowiedz

3

Ślad stosu sugeruje, że masz mapowanie URL w WSGIApplication że zawiera grupę, ale nie ma obsługi z odpowiednimi argumentami.

Jeśli masz

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

to trzeba

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

doc używasz sprzed daty Pythona 2.7 wsparcie od kilku lat. Gdybym był na twojej pozycji, byłbym kuszony, aby najpierw uruchomić aplikację na Pythonie 2.5, a następnie port do wersji 2.7.

-1

Problemem jest tutaj:

import webapp2 

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

Nie można używać webapp2.WSGIApplication skonstruować swoją aplikację , nie rozumie protorpc. Zamiast tego wykonaj to:

from protorpc.wsgi import service 

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

Protorpc to droga, ale jest nowa i wciąż eksperymentalna i wymaga znacznie więcej niż fragment kodu. Dokumenty są tutaj https://developers.google.com/appengine/docs/python/tools/protorpc/, ale na dzień dzisiejszy przykłady mają wiele błędów i nie są jasne, ale możesz je uruchomić, jeśli debugujesz przykłady siebie. Wysłałem poprawki, które zrobiłem, aby uzyskać przykład księgi gości do pracy w grupie google dla protorpc. – dansalmo