4

以下のコードを使用して、竜巻でdjangoユーザーを取得しています。

from django.conf import settings
import django.contrib.auth
import django.utils.importlib

import tornado
from tornado.options import options
import tornado.web
import tornado.ioloop
import sockjs.tornado

class RouterConnection(sockjs.tornado.SockJSConnection):

    def get_current_user(self, info):
        engine = django.utils.importlib.import_module(django.conf.settings.SESSION_ENGINE)
        session_key = str(info.get_cookie(django.conf.settings.SESSION_COOKIE_NAME)).split('=')[1]

        class Dummy(object):
            pass

        django_request = Dummy()
        django_request.session = engine.SessionStore(session_key)
        user = django.contrib.auth.get_user(django_request)
        return user


    def on_open(self, info):
        user = self.get_current_user(info=info)

if __name__ == "__main__":
    import logging
    Router = sockjs.tornado.SockJSRouter(RouterConnection)

    app = tornado.web.Application(Router.urls, debug=True, )

    app.listen(settings.TORNADO_PORT)

    tornado.options.parse_command_line()
    tornado.ioloop.IOLoop.instance().start()

私の問題は次のとおりです
。Django がログの構成を変更し、tornado からのログ出力が表示されなくなりました。トルネード ロギングを再初期化するにはどうすればよいですか? Django と Tornado を統合する他の方法はありますか?

よろしくお願いします。

4

2 に答える 2

2

django のログをリセットするには、次を使用します。

logger = logging.getLogger('')
for handler in logger.handlers:
    logger.removeHandler(handler)
tornado.options.parse_command_line()

django.conf モジュールを使用すると、初期化された django ロガーで LazySettings クラスが初期化されます。また、初期化された設定クラスを使用してコードを書き直す必要がありました。

from django.conf import settings
import django.contrib.auth
import django.utils.importlib

import tornado
from tornado.options import options
import tornado.web
import tornado.ioloop
import sockjs.tornado

TORNADO_PORT = settings.TORNADO_PORT

class RouterConnection(sockjs.tornado.SockJSConnection):

    def get_current_user(self, info):
        engine = django.utils.importlib.import_module(settings.SESSION_ENGINE)
        session_key = str(info.get_cookie(settings.SESSION_COOKIE_NAME)).split('=')[1]

        class Dummy(object):
            pass

        django_request = Dummy()
        django_request.session = engine.SessionStore(session_key)
        user = django.contrib.auth.get_user(django_request)
        return user


    def on_open(self, info):
        user = self.get_current_user(info=info)

if __name__ == "__main__":
    import logging
    logger = logging.getLogger('')
    for handler in logger.handlers:
        logger.removeHandler(handler)
    tornado.options.parse_command_line()

    Router = sockjs.tornado.SockJSRouter(RouterConnection)

    app = tornado.web.Application(Router.urls, debug=settings.DEBUG)

    app.listen(settings.TORNADO_PORT)

    tornado.options.parse_command_line()
    tornado.ioloop.IOLoop.instance().start()
于 2013-05-15T06:07:39.733 に答える
-1

tornado.wsgi.WSGIContainerDjango をラップするために使用します。実際の例については、このデモ プロジェクトを参照してください。

于 2013-05-14T23:29:57.667 に答える