2011-08-28 185 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(),但這些不是全局對象,它們是方法。

我假設你要麼需要實例化類,並通過該對象的屬性,或需要作爲評論者建議傳遞類的屬性。