我的网站使用了 Django 和 Tornado 的组合。龙卷风很棒
身份验证系统,我想在django视图中使用它。不幸的是,我收到了AttributeError
。
如何在Django视图中使用Tornado身份验证?
查看
import tornado.web
from django import shortcuts
@tornado.web.authenticated
def testpage(request):
return shortcuts.render(request, 'web/templates/index.html')
错误消息
AttributeError: 'WSGIRequest' object has no attribute 'current_user'
Django通过WSGIContainer
连接到Tornado:
def main():
static_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'static')
assert os.path.isdir(static_path), static_path
wsgi_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler())
tornado_app = tornado.web.Application([],static_path=static_path,)
server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == '__main__':
main()
答案 0 :(得分:1)
tornado.auth
模块通过openid / oauth流程,但在该过程结束时,它所做的只是回调您可能设置cookie的代码。您使用get_current_user
在Tornado中读取该cookie,但这是特定于Tornado RequestHandler接口的。要使用来自django的cookie,您需要自己阅读cookie(请参阅tornado.web.decode_signed_value函数,假设您使用set_secure_cookie设置cookie)。您可以在django框架中找到正确的位置来执行此操作,在这种情况下您可以使用django的login_required
装饰器,或者您可以在django处理程序中执行此操作,在这种情况下您需要您可以自行重定向到登录表单。