2011-08-28 127 views
1

我正在为appengine创建一个webservice,并且在类WebService.py中创建了两个函数。我试图在SimpleXMLRPCServer对象中注册这些函数。但是,当我将函数名称传递给参数时,它表示未定义的变量。找不到函数名称

下面是代码:

import SimpleXMLRPCServer 

from google.appengine.ext import webapp 
from google.appengine.ext import db 

class WebService(webapp.RequestHandler): 
    def login(self, username, password): 

     calls = db.GqlQuery("SELECT * from User ORDER BY username DESC LIMIT 10") 

     for call in calls: 
      if calls.username == username and calls.password == password: 
       return True 
     return False 

    def register(self, username, password): 

     db.GqlQuery("INSERT into User (username, password) value(%s, %s)"%(username, password)) 
     return True 

server = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost',8080)) 
server.register_function(login) 
server.register_function(register) 
server.serve_forever() 

这是做正确的方式?如果没有,请问我的代码中有什么问题?

谢谢!

+2

你试过'WebService.login'和'Webservice.register'吗? – agf

+1

你*真的*不想让你的RequestHandler的这些方法。当然,你根本无法在App Engine中的8080端口上运行服务器,所以你根本不想这样做。 – geoffspear

+0

你建议我做什么? – rogcg

回答

0

我只是想通了!我仍然是Python新手,所以这是一个新手怀疑。

看起来问题是与身份。我需要把它放在班级的身份,所以它可以找到方法。

事实上,它应该是这样的:

import SimpleXMLRPCServer 

from google.appengine.ext import webapp 
from google.appengine.ext import db 

class WebService(webapp.RequestHandler): 
    def login(self, username, password): 

     calls = db.GqlQuery("SELECT * from User ORDER BY username DESC LIMIT 10") 

     for call in calls: 
      if calls.username == username and calls.password == password: 
       return True 
     return False 

    def register(self, username, password): 

     db.GqlQuery("INSERT into User (username, password) value(%s, %s)"%(username, password)) 
     return True 

    server = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost',8080)) 
    server.register_function(login) 
    server.register_function(register) 
    server.serve_forever() 

这解决了我的问题。谢谢您的回复。

+1

你真的想开始在类定义中服务吗?不,你没有。这可能解决了短期问题,但这是不正确的。 – agf

+0

你建议我做什么? – rogcg

+0

请参阅我对问题的回答。你可以用app引擎做xml-rpc,但不是这样。 – agf

2

您试图将全局对象loginregister改为register_function(),但这些不是全局对象,它们是方法。

我假设你要么需要实例化类,并通过该对象的属性,或需要作为评论者建议传递类的属性。