(一)最小的Django
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃
本文基本内容均出自《Lightweight Django》(中文为《轻量级Django》),结合了一定的个人理解,书中的源码地址:https://github.com/lightweightdjango/examples,我使用的Django版本为1.11.3,并对每章的代码进行了复现。
一、 最小的django代码
# -*- coding: utf-8 -*- import os import sys from django.http import HttpResponse from django.conf.urls import url from django.conf import settings ###引入试图模块(对应views.py) def index(req): return HttpResponse('HELLO') ###引入url模块(对应url.py) urlpatterns = [ url(u'^$', index), ] ###setting模块 settings.configure( DEBUG=True, SECRET_KEY='thisissecretkey', ROOT_URLCONF=__name__, MIDDLEWARE=[ 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ) if __name__ == '__main__': ###对应manager.py from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
保存并运行
python xxx.py runserver
二、为代码添加WSGI应用
WSGI:web服务器网关接口,是web服务器和Django应用框架通信的协议规范(包括其他框架如mod_wsgi CherryPy Tornado等),Django通过get_wsgi_application创建WSGI应用。
from django.core.wsgi import get_wsgi_application ##在xxx.py中引入包文件 application = get_wsgi_application()
此时xxx.py已经可以接入WSGI服务器了,选择Gunicorn作为WSGI服务器。这里的环境是mac或者Linux,如果是Windows环境,建议使用mod_wsgi,配合Apache搭建服务器,配置麻烦一些。
pip install gunicorn
运行服务器:
gunicorn xxx --log-file=-
三、配置不同的运行环境
在我们的xxx.py中,DEBUG是开启状态的,SECRET_KEY是非随机的,这些都不适用生产环境,所以这里引入另一个问题:Django的项目该如何管理项目的配置问题(开发-阶段运行-形成产品)。通常我们把setting.py转换为一个包并为每个环境创建模块,这样解决不同的环境配置文件,在我们的xxx.py文件中我们只有一个setting模块,为了配置不同的运行环境,例如DEBUG的开关,做出如下修改:
###setting模块 DEBUG=os.environ.get('DEBUG','on')=='on' SECRET_KEY=os.environ.get('SECRET_KEY',os.urandom(32)) settings.configure( DEBUG=DEBUG, SECRET_KEY=SECRET_KEY,
同时,我们还需要远端访问,联想之前在setting.py中对于ALLOWED_HOST进行设置,我们在这里也需要进行添加,修改后的setting模块:
###setting模块 DEBUG=os.environ.get('DEBUG','on')=='on' SECRET_KEY=os.environ.get('SECRET_KEY',os.urandom(32)) ALLOWED_HOST=[‘*’] settings.configure( DEBUG=DEBUG, SECRET_KEY=SECRET_KEY, ALLOWED_HOST=ALLOWED_HOST
四、再次运行
再次运行时,我们可以在bash中使用django自带的服务器或者使用我们刚才安装的gunicorn:
###配置环境变量DEBUG export DEBUG=off ##关闭了DEBUG,注意这是在mac或者Linux下,若是Windows环境请使用set进行环境变量设置:set DEBUG=off ### SECRET_KEY如果没有设置, python xxx.py runserver 0.0.0.0:8000 ###或者使用gunicorn unicorn -w 4 -b 0.0.0.0:8000 xxx —log-file=- ###-w 4表示开启4个进程
五、使用模板
修改一份模板代码,这里只替换了随机生成的SECRET_KEY:
SECRET_KEY=os.environ.get('SECRET_KEY’,’{{secret_key}}')
使用这个随机秘钥的替换方式,会为每一个项目生成一个固定的秘钥,同时又确保项目之间秘钥不同。ok,我们将修改的xxx.py放到template文件夹中并命名为template.py,执行startproject(注意执行的路径):
django-admin.py startproject foo —template=templat
附:最终完整的模板代码
import os import sys from django.http import HttpResponse from django.conf import settings from django.conf.urls import url from django.core.wsgi import get_wsgi_application def index(req): return HttpResponse('HelloWorld') urlpatterns=[ url(u'^$',index), ] DEBUG = os.environ.get('DEBUG','on')=='on' SECRET_KEY = os.environ.get('SECRET_KEY','{{secret_key}}') ALLOWED_HOSTS=['*'] settings.configure( DEBUG=DEBUG, SECRET_KEY=SECRET_KEY, ROOT_URLCONF=__name__, ALLOWED_HOSTS=ALLOWED_HOSTS, MIDDLEWARE=[ 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ) application = get_wsgi_application() if __name__ == "__main__": from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)