Python 龙卷风重定向超时
我正在尝试向我构建的web应用程序添加一些用户身份验证,以便使用tornado提供的资源() 除非我故意不匹配我的loginhandler和重定向(/login),否则它会超时,在这种情况下,我会得到404 我已经提供了我的代码,我已经剥离了一些基本的东西,因为问题就在这里。但我不知道在哪里。任何帮助都是巨大的Python 龙卷风重定向超时,python,webserver,tornado,Python,Webserver,Tornado,我正在尝试向我构建的web应用程序添加一些用户身份验证,以便使用tornado提供的资源() 除非我故意不匹配我的loginhandler和重定向(/login),否则它会超时,在这种情况下,我会得到404 我已经提供了我的代码,我已经剥离了一些基本的东西,因为问题就在这里。但我不知道在哪里。任何帮助都是巨大的 import os import tornado.httpserver import tornado.ioloop import tornado.web import torna
import os
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket
from tornado.options import options, define
# Define available options
define("port", default=8888, type=int, help="run on the given port")
PORT = 8888
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
return self.get_secure_cookie("user")
class MainHandler(BaseHandler):
@tornado.web.asynchronous
def get(self):
# Send our main document
if not self.current_user:
self.redirect("/login")
return
self.render("index.html")
class LoginHandler(BaseHandler):
@tornado.web.asynchronous
def get(self):
self.write('<html><body><form action="/login" method="post">'
'Name: <input type="text" name="name">'
'<input type="submit" value="Sign in">'
'</form></body></html>')
def post(self):
self.set_secure_cookie("user", self.get_argument("name"))
self.redirect("/")
class TornadoWebServer(tornado.web.Application):
' Tornado Webserver Application...'
def __init__(self):
#Url to its handler mapping.
handlers = [(r"/", MainHandler),
(r"/login", LoginHandler),
(r"/images/(.*)", tornado.web.StaticFileHandler, {"path": "web/images"}),
(r"/js/(.*)", tornado.web.StaticFileHandler, {"path": "web/js"}),
(r"/style/(.*)", tornado.web.StaticFileHandler, {"path": "web/style"})]
#Other Basic Settings..
settings = dict(
cookie_secret="set_this_later",
login_url="/login",
template_path=os.path.join(os.path.dirname(__file__), "web"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
xsrf_cookies=True,
debug=True)
#Initialize Base class also.
tornado.web.Application.__init__(self, handlers, **settings)
if __name__ == '__main__':
#Tornado Application
print("Initializing Tornado Webapplications settings...")
application = TornadoWebServer()
# Start the HTTP Server
print("Starting Tornado HTTPServer on port %i" % PORT)
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(PORT)
# Get a handle to the instance of IOLoop
ioloop = tornado.ioloop.IOLoop.instance()
# Start the IOLoop
ioloop.start()
导入操作系统
导入tornado.httpserver
导入tornado.ioloop
导入tornado.web
导入tornado.websocket
从tornado.options导入选项中,定义
#定义可用选项
定义(“端口”,默认值=8888,type=int,help=“在给定端口上运行”)
端口=8888
类BaseHandler(tornado.web.RequestHandler):
def get_当前_用户(自身):
返回self.get\u secure\u cookie(“用户”)
类MainHandler(BaseHandler):
@tornado.web.asynchronous
def get(自我):
#发送我们的主要文件
如果不是self.current\u用户:
self.redirect(“/login”)
返回
self.render(“index.html”)
类LoginHandler(BaseHandler):
@tornado.web.asynchronous
def get(自我):
自我书写(“”)
'姓名:'
''
'')
def post(自我):
self.set\u secure\u cookie(“用户”,self.get\u参数(“名称”))
self.redirect(“/”)
类tornado web服务器(tornado.web.Application):
“Tornado Web服务器应用程序…”
定义初始化(自):
#指向其处理程序映射的Url。
处理程序=[(r/),MainHandler),
(r“/登录”,LoginHandler),
(r“/images/(.*)”,tornado.web.StaticFileHandler,{“路径”:“web/images”}),
(r“/js/(*)”,tornado.web.StaticFileHandler,{“path”:“web/js”}),
(r“/style/(.*)”,tornado.web.StaticFileHandler,{“path”:“web/style”})]
#其他基本设置。。
设置=听写(
cookie\u secret=“稍后再设置”,
login\u url=“/login”,
template_path=os.path.join(os.path.dirname(_文件,,“web”),
static\u path=os.path.join(os.path.dirname(\uuu file\uuuu),“static”),
xsrf_=真,
debug=True)
#同时初始化基类。
tornado.web.Application.\uuuuu init\uuuuuuu(self,handlers,**设置)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#龙卷风应用
打印(“初始化Tornado Web应用程序设置…”)
application=webserver()
#启动HTTP服务器
打印(“在端口%i“%port”上启动Tornado HTTPServer)
http_server=tornado.httpserver.httpserver(应用程序)
http_服务器。侦听(端口)
#获取IOLoop实例的句柄
ioloop=tornado.ioloop.ioloop.instance()
#启动IOLoop
ioloop.start()
您正在get请求中使用@tornado.web.asynchronous decorator删除此选项将解决问题,或者如果需要,您可以在执行write命令后调用self.finish()
你可以在这里找到更多关于这位装饰师的信息
下面是一个在登录句柄上使用self.finish的示例
class LoginHandler(BaseHandler):
@tornado.web.asynchronous
def get(self):
self.write('<html><body><form action="/login" method="post">'
'Name: <input type="text" name="name">'
'<input type="submit" value="Sign in">'
'</form></body></html>')
self.finish()
def post(self):
self.set_secure_cookie("user", self.get_argument("name"))
self.redirect("/")
类LoginHandler(BaseHandler):
@tornado.web.asynchronous
def get(自我):
自我书写(“”)
'姓名:'
''
'')
self.finish()
def post(自我):
self.set\u secure\u cookie(“用户”,self.get\u参数(“名称”))
self.redirect(“/”)
您正在get请求中使用@tornado.web.asynchronous decorator删除此选项将解决问题,或者如果需要,您可以在执行write命令后调用self.finish()
你可以在这里找到更多关于这位装饰师的信息
下面是一个在登录句柄上使用self.finish的示例
class LoginHandler(BaseHandler):
@tornado.web.asynchronous
def get(self):
self.write('<html><body><form action="/login" method="post">'
'Name: <input type="text" name="name">'
'<input type="submit" value="Sign in">'
'</form></body></html>')
self.finish()
def post(self):
self.set_secure_cookie("user", self.get_argument("name"))
self.redirect("/")
类LoginHandler(BaseHandler):
@tornado.web.asynchronous
def get(自我):
自我书写(“”)
'姓名:'
''
'')
self.finish()
def post(自我):
self.set\u secure\u cookie(“用户”,self.get\u参数(“名称”))
self.redirect(“/”)