使用 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
广告
将在 10 秒后关闭
bannerAds