我正在尝试编写Flask服务器类,但在decorator方法上遇到错误。
class Server:
def __init__(self, port):
self.server = flask.Flask(__name__)
self.port = port
@self.server.route("/isRunning/<int:index>/")
def isRunning(self, index):
while (not self.running):
time.sleep(0.5)
return "Ok"
def run(self):
self.server.run(host="localhost", port=self.port)
a = Server(5000)
a.run()
File "Server.py", line 20, in Server
@self.server.route("/login/<string:name>/<int:r>/<int:g>/<int:b>/")
NameError: name 'self' is not defined
我据此猜测装饰器无法访问该实例。正确的方法是什么?
不要使用route
作为修饰符,而应作为一个简单的函数来调用。
class Server:
def __init__(self, port):
self.server = flask.Flask(__name__)
self.port = port
self.server.route("/isRunning/<int:index>/")(self.isRunning)
def isRunning(self, index):
while (not self.running):
time.sleep(0.5)
return "OK"
def run(self):
self.server.run(host="localhost", port=self.port)
a = Server(5000)
a.run()
(也请注意,在Server.run
中,对app
的引用应该是对self.server
的引用。)