django-starter-notes

这次就直接用英文标题了……

花了两天左右照着文档和各种中文博客水了一个django的demo出来,不管是自带的权限系统,还是ORM,都各种不习惯啊……管理用的manage.py挺好,很有Rails系列的风格;模板引擎和jinja2差不多,不过仅限我用了的那一部分,剩下的还不知道;python3.6Type hints真好用.

over

等下这也太短了啊,不过也确实没啥值得记录的坑,除了orm查不到会抛异常(呃,也可能是我操作有误)就没什么了

但是我们要谈一下部署

在Windows上尝试部署Django

貌似python web在*nix上用的最多的是nginx+uwsgi的方式,但是我并不是很想在我的linux上部署django,因为我只是想尝试性的做个在我笔记本式上跑的demo,而且没有多余的机器来运行.但是nginxWindows上表现不是很好,uwsgi在windows上跑不起来,所以放弃了这个方案.

还好我们有另一个神奇的Python Web ServerTornado,是的没错,就是那个异步的东西.Tornado既是一个Web框架,也有一个wsgi服务器,而且据说效率还不错,更重要的是能在Windows下正常运行,所以就是它了.

首先我们引入djangotornado

1
2
3
4
5
6
from tornado.options import options, define
import django.core.handlers.wsgi
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.wsgi

然后设置变量

1
2
3
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_demo.settings")
define('port', type=int, default=8080)
django.setup()

到这里都没啥好说的,下面才是正片

设置静态资源路径,我是把django自带的admin的静态文件直接拿过来了

1
static_path = os.path.join(os.path.dirname(__file__), "static")

构建django应用

1
2
3
django_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler()
)

构建tornado应用

1
2
3
app = tornado.web.Application([
('.*', tornado.web.FallbackHandler, dict(fallback=django_app)),
], static_path=static_path)

创建Http服务器,开启ioloop

1
2
3
server = tornado.httpserver.HTTPServer(app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

没错就是这样,把django应用作为tornado应用的一部分,由tornado接收路由后调用django应用进行处理,同时tornado还可以开启多个应用同时工作.

效率问题嘛……

我用ab跑了个分,但是没有对比(毕竟上次给nodejsbenmark还是半年前的事了)就不发出来了,感觉并是很不高效,可能与python自身的运行速度有关……


本博的原创作品作品采用知识共享署名 2.5 中国大陆许可协议 进行许可,欢迎转载,但转载请注明出处,并保持转载后文章内容的完整。
本文链接:http://fallenwood.github.io/2017/02/21/django-starter-notes/