如何在django视图中使用tornado身份验证?

时间:2014-02-13 15:07:21

标签: python django django-views tornado

我的网站使用了 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()

1 个答案:

答案 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处理程序中执行此操作,在这种情况下您需要您可以自行重定向到登录表单。