来自render_GET
中Resource
的{{1}}方法,是否可以完全重定向到其他网址(在其他地方托管)
twisted
似乎没有做任何事情,request.redirect(url)
php中的等价物是,
twisted.web.util.Redirect
这是我正在运行的代码
header('location:'.$url);
答案 0 :(得分:4)
我最后在另一张海报的帮助下完成了这项工作,request.finish()
,重定向包括http://
并返回NOT_DONE_YET
from twisted.web import server, resource
from twisted.internet import reactor
class Simple(resource.Resource):
isLeaf = True
def render_GET(self, request):
request.redirect("http://www.google.com")
request.finish()
return server.NOT_DONE_YET
site = server.Site(Simple())
reactor.listenTCP(8080, site)
reactor.run()
答案 1 :(得分:3)
Location
header requires absolute url,例如http://example.com
。
302 Found响应代码说我们应该提供一个带有指向新URI的超链接的简短超文本注释。 redirectTo()
正是这样做的:
from twisted.web import server, resource
from twisted.web.util import redirectTo
from twisted.internet import reactor
class HelloResource(resource.Resource):
isLeaf = True
def render_GET(self, request):
return redirectTo('http://example.com', request)
reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()
或使用Redirect
:
from twisted.web import server
from twisted.web.util import Redirect
from twisted.internet import reactor
reactor.listenTCP(8080, server.Site(Redirect("http://example.com")))
reactor.run()
或者只使用web
twistd插件,放入redirect.rpy
文件:
from twisted.web.util import Redirect
resource = Redirect("http://example.com")
运行:
$ twistd -n web --port tcp:8080:localhost --resource-script redirect.rpy
仅供演示,以下是redirectTo()
的实现方式:
def redirect_to(url, request):
request.setResponseCode(302) # Found
request.setHeader("Location", url)
request.setHeader("Content-Type", "text/html; charset=UTF-8")
return """put html with a link to %(url)s here""" % dict(url=url) # body
答案 2 :(得分:1)
您应该可以使用request.redirect(url)
重定向,然后调用request.finish()
。请确认您正在呼叫request.finish()
。