找不到函数名

1 投票
2 回答
2923 浏览
提问于 2025-04-17 00:29

我正在为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

你想把全局对象 loginregister 传给 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()

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

撰写回答