如何理解Django中的tornado响应请求周期
How to understand tornado response request cycle in Django
我想使用 tornado 和 Django 创建一个实时 Twitter 流应用程序。问题是我在这里无法理解 Tornado 的作用,以及如何在 Tornado Web Server 中使用 Django 的 view.py
models.py
。
下面是Django的请求响应周期,谁能给我解释一下tornado web服务器在这里是如何发挥作用的。
几个问题:
1- urls.py
文件在 Django 中的作用是什么,因为我们将从 Tornado 本身路由所有 url。
2- 我将如何连接到 models.py
以获取我的龙卷风应用程序的行。
我正在研究这个 github 项目 link
Tornado 大致适合此图的 "web server" 和 "wsgi" 部分,并为附加到 Web 服务器的 Tornado RequestHandlers 添加了另一部分。当您创建 tornado.web.Application
时,您会将一些 URL 发送到 Tornado RequestHandlers,将一些 URL 发送到 Django WSGIContainer(后者将使用 Django urls.py
)。
使用 Tornado 代码中的 Django 模型更具挑战性;我上次尝试执行此操作时的代码位于 https://gist.github.com/bdarnell/654157(但请注意,这已经很旧了,我不知道它是否还能正常工作)
这是 tornado_main.py 与 manage.py 存储在同一层中...我已经使用 Django 1.8 对其进行了测试...
# coding=utf-8
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project_dir.settings")
import django
django.setup()
from django.core.urlresolvers import reverse_lazy
from django.contrib.auth.models import User
from tornado.options import options, define, parse_command_line
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.wsgi
define('port', type=int, default=8004)
# tornado.options.options['log_file_prefix'].set(
# '/var/www/myapp/logs/tornado_server.log')
tornado.options.parse_command_line()
class SomeHandler(tornado.websocket.WebSocketHandler):
pass
def main():
logger = logging.getLogger(__name__)
tornado_app = tornado.web.Application(
[
(r'/some_url/(?P<user_id>[0-9]+)', SomeHandler),
],
debug=True
)
logger.info("Tornado server starting...")
server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
try:
tornado.ioloop.IOLoop.instance().start()
except KeyboardInterrupt:
tornado.ioloop.IOLoop.instance().stop()
logger.info("Tornado server has stopped")
if __name__ == '__main__':
main()
我想使用 tornado 和 Django 创建一个实时 Twitter 流应用程序。问题是我在这里无法理解 Tornado 的作用,以及如何在 Tornado Web Server 中使用 Django 的 view.py
models.py
。
下面是Django的请求响应周期,谁能给我解释一下tornado web服务器在这里是如何发挥作用的。
几个问题:
1- urls.py
文件在 Django 中的作用是什么,因为我们将从 Tornado 本身路由所有 url。
2- 我将如何连接到 models.py
以获取我的龙卷风应用程序的行。
我正在研究这个 github 项目 link
Tornado 大致适合此图的 "web server" 和 "wsgi" 部分,并为附加到 Web 服务器的 Tornado RequestHandlers 添加了另一部分。当您创建 tornado.web.Application
时,您会将一些 URL 发送到 Tornado RequestHandlers,将一些 URL 发送到 Django WSGIContainer(后者将使用 Django urls.py
)。
使用 Tornado 代码中的 Django 模型更具挑战性;我上次尝试执行此操作时的代码位于 https://gist.github.com/bdarnell/654157(但请注意,这已经很旧了,我不知道它是否还能正常工作)
这是 tornado_main.py 与 manage.py 存储在同一层中...我已经使用 Django 1.8 对其进行了测试...
# coding=utf-8
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project_dir.settings")
import django
django.setup()
from django.core.urlresolvers import reverse_lazy
from django.contrib.auth.models import User
from tornado.options import options, define, parse_command_line
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.wsgi
define('port', type=int, default=8004)
# tornado.options.options['log_file_prefix'].set(
# '/var/www/myapp/logs/tornado_server.log')
tornado.options.parse_command_line()
class SomeHandler(tornado.websocket.WebSocketHandler):
pass
def main():
logger = logging.getLogger(__name__)
tornado_app = tornado.web.Application(
[
(r'/some_url/(?P<user_id>[0-9]+)', SomeHandler),
],
debug=True
)
logger.info("Tornado server starting...")
server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
try:
tornado.ioloop.IOLoop.instance().start()
except KeyboardInterrupt:
tornado.ioloop.IOLoop.instance().stop()
logger.info("Tornado server has stopped")
if __name__ == '__main__':
main()