Python/Tornado - 为什么会出现错误:self未定义?
我刚开始使用Tornado框架。我想做的就是在首页点击提交按钮,然后通过表单的动作跳转到登录页面(这部分目前是正常的);但是,我在获取提交的数据以进行登录时遇到了问题,导致它无法正常工作。
第一个问题是,为什么我会收到这个错误:
password = self.get_argument('password', None)
NameError: name 'self' is not defined
这是我目前写的Python代码:
import os
import tornado.web
import tornado.ioloop
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class LoginHandler(tornado.web.RequestHandler):
def post(self):
useremail = self.get_argument('useremail', None)
password = self.get_argument('password', None)
self.render("login.html")
def main():
application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
(r"/css/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(os. path.dirname(__file__), 'css')}),
(r"/pictures/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(os.path.dirname(__file__), 'pictures')}),
])
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
第二个问题是,这里还有什么明显错误的地方吗?我对如何渲染网页,比如Login.html和Index.html等,感到很不确定。
从语法上看,这段代码似乎也能正常工作:return self.write(open("index.html", 'r').read())
。这段代码到底和我现在的代码有什么区别呢?
谢谢你的帮助!
2 个回答
0
另外,如果你这样做
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
def post(self):
self.render("index.html")
它也会为POST请求提供index.html。
3
你的代码缩进有问题,混用了空格和制表符(Tab)。可以用 python -tt
来检查一下。