使用 Django + uWSGI 进行自动重载
安装
Django
sudo pip install Django
uWSGI
sudo pip install uwsgi
环境 –
创建Django项目
cd ~/dev/sandbox
django-admin.py startproject hello_wsgi
目录结构
tree hello_wsgi
├── hello_wsgi
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
└── manage.py
从Django 1.4开始,会创建 wsgi.py 文件。
将文件检查的库放置在 Django 项目的Top目录下。
参考:http://yoshi.o-oi.net/Entry/11/
cd ~/dev/sandbox
curl -O http://projects.unbit.it/uwsgi/export/ad7c6d18232ed1321497c8892c038628a9110891/uwsgidecorators.py
接下来,当源代码发生变化时,创建一个用于重新加载的任务文件。
参考:http://projects.unbit.it/uwsgi/wiki/TipsAndTricks
由于使用了xrange函数,因此在Python3中,请使用python3的版本。
cd ~/dev/sandbox
vim task.py
任务.py的内容
import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload
@timer(3)
def change_code_gracefull_reload(sig):
if autoreload.code_changed():
uwsgi.reload()
创建uwsgi配置文件
参考:http://projects.unbit.it/uwsgi/wiki/Doc
django配置文件 (django.ini)
[uwsgi]
# set the http port
http = :8000
# change to django project directory
chdir = /Users/toku/dev/sandbox/hello_wsgi
# load django
module = hello_wsgi.wsgi
import = task
master = True
您可以在 hello_wsgi/urls.py 的 urlpatterns 中添加以下内容。
url(r'^$', 'hello_wsgi.views.home', name='home'),
在 hello_wsgi/views.py 中,我们准备了以下的方法。
from django.http import HttpResponse
import datetime
def home(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s! changed!" % now
return HttpResponse(html)
uWSGI的启动
uwsgi --ini django.ini
当使用 Django 项目时,文件更新后将自动更新。
通过更新 views.py 并重新加载浏览器,可以确认更改的内容已被反映。
最终的目录结构 de
hello_wsgi/
├── hello_wsgi
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── django.ini
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── views.py
│ ├── views.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── manage.py
├── task.py
├── task.pyc
├── uwsgidecorators.py
└── uwsgidecorators.pyc