(一)最小的Django

本文爲做者原創,轉載請註明出處(http://www.cnblogs.com/mar-q/)by 負贔屓python

 

  本文基本內容均出自《Lightweight Django》(中文爲《輕量級Django》),結合了必定的我的理解,書中的源碼地址:https://github.com/lightweightdjango/examples,我使用的Django版本爲1.11.3,並對每章的代碼進行了復現。git

  1、  最小的django代碼 github

# -*- 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)

保存並運行web

python xxx.py runserver

 

2、爲代碼添加WSGI應用django

  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搭建服務器,配置麻煩一些。bash

pip install gunicorn

  運行服務器:服務器

gunicorn xxx --log-file=-

 

3、配置不一樣的運行環境app

  在咱們的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
  
4、再次運行
  再次運行時,咱們能夠在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個進程

 

 
5、使用模板
   修改一份模板代碼,這裏只替換了隨機生成的SECRET_KEY:
SECRET_KEY=os.environ.get('SECRET_KEY’,’{{secret_key}}')

  使用這個隨機祕鑰的替換方式,會爲每個項目生成一個固定的祕鑰,同時又確保項目之間祕鑰不一樣。ok,咱們將修改的xxx.py放到template文件夾中並命名爲template.py,執行startproject(注意執行的路徑):dom

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)
相關文章
相關標籤/搜索