找不到函数名
我正在为appengine创建一个网络服务,并在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 个回答
2
你想把全局对象 login
和 register
传给 register_function()
,但是它们其实不是全局对象,而是方法。
我猜你要么需要创建这个类的一个实例,然后把这个实例的属性传进去,要么就像评论里提到的那样,直接传这个类的属性。
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()
这解决了我的问题。谢谢大家的回复。