我正在为appengine创建一个web服务,我在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()
这是正确的方法吗?如果没有,你能告诉我我的代码有什么问题吗?
谢谢!
答案 0 :(得分:2)
您正在尝试将全局对象login
和register
传递给register_function()
,但这些对象不是全局对象,而是方法。
我假设您需要实例化该类并传递该对象的属性,或者您需要按照评论者的建议传递该类的属性。
答案 1 :(得分: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()
这解决了我的问题。谢谢你的回复。