2012-03-03 29 views
5

Có bất kỳ hướng dẫn hoặc ví dụ mã nào liên quan đến việc triển khai AJAX cho GAE + Python2.7 + webapp2 hay không.GAE + Python2.7 + webapp2 + AJAX

Tôi đã thử làm theo hướng dẫn dưới đây:

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

nhưng tôi nhận được lỗi sau:

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ó một cuộc thảo luận tương tự ở đây:

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

anh res là mã của tôi từ ví dụ Specialscope của:

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) 

Trả lời

3

Các vết đống gợi ý rằng bạn có một bản đồ url trong WSGIApplication của bạn mà có một nhóm trong đó, nhưng không có trình xử lý nào với các đối số tương ứng.

Nếu bạn có

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

sau đó bạn cần

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

Doc bạn đang sử dụng trước ngày Python 2.7 hỗ trợ bởi nhiều năm. Tôi đã ở vị trí của bạn, tôi sẽ bị cám dỗ để có được các ứng dụng làm việc đầu tiên trên Python 2,5, sau đó cổng đến 2,7.

0

tôi có mẫu mã cho AJAX tải lên hình ảnh cho GAE + Python2.7 đây, http://verysimplescripts.blogspot.com/

+0

Cảm ơn ví dụ Harendra, nhưng tôi nhận được lỗi 404 khi tôi cố gắng tải tệp lên. Bất kỳ ý tưởng? – MaxHash

+0

bạn có thể đăng mã của mình bao gồm các tuyến đường không. – specialscope

+0

Tôi đã thêm mã vào câu hỏi của mình. Cảm ơn! – MaxHash

-1

Vấn đề là ở đây:

import webapp2 

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

Bạn không thể sử dụng webapp2.WSGIApplication để xây dựng ứng dụng của bạn , nó không hiểu protorpc. Thay vào đó, hãy thực hiện việc này:

from protorpc.wsgi import service 

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

protorpc là cách để đi nhưng nó mới và vẫn thử nghiệm và yêu cầu nhiều hơn đoạn mã của bạn. Tài liệu có tại đây https://developers.google.com/appengine/docs/python/tools/protorpc/ nhưng kể từ hôm nay, các ví dụ có nhiều lỗi và không rõ ràng, nhưng bạn có thể làm cho tài liệu hoạt động nếu bạn gỡ lỗi các ví dụ bản thân bạn. Tôi đã đăng các chỉnh sửa mà tôi đã thực hiện để có được ví dụ về lưu bút làm việc trong nhóm google cho protorpc. – dansalmo