Python/Tornado - 为什么会出现错误:self未定义?

0 投票
2 回答
1644 浏览
提问于 2025-04-17 14:47

我刚开始使用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 来检查一下。

撰写回答