《玩轉Django2.0》讀書筆記-Django配置信息

              《玩轉Django2.0》讀書筆記-Django配置信息python

                                       做者:尹正傑 mysql

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。sql

 

  項目配置是根據實際開發需求從而對整個Web框架編寫相應配置信息。配置信息主要由項目對「setting」實現,主要配置有項目路徑,密鑰配置,域名訪問權限,App列表,配置靜態資源,配置模板文件,數據配置,中間件和緩存配置。數據庫

 

 

一.基本配置信息django

  一個簡單對項目必須具有對基本配置信息有:項目路徑,密鑰配置,域名訪問權限,App列表和中間件。以「MyWeb」項目爲例,setting.py的基本配置以下:瀏覽器

"""
Django settings for MyWeb project.

Generated by 'django-admin startproject' using Django 2.1.4.

For more information on this file, see
https://docs.djangoproject.com/en/2.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""

import os

'''
BASE_DIR:
    指定項目路徑,主要經過os模塊讀取當前項目在系統的具體路徑,該代碼在建立項目時自動生成,通常狀況下無需修改。    
'''
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

'''
SECRET_KEY:
    指定密鑰配置,是一個隨機值,在項目建立的時候自動生成,通常狀況下無需修改。主要用於重要的數據的加密處理,提升系統的
安全性,避免遭到攻擊者惡意破壞。密鑰主要用戶用戶密碼,CSRF機制和繪畫 Session等數據加密。
    
    用戶密碼:
        Django內置一套用戶管理系統,該系統具備用戶認證和存儲用戶信息等功能,在建立用戶的時候,該用戶密碼經過密鑰
進行加密處理,保證用戶的安全性能。
    CSRF機制:
        該機制主要用以表單提交,防止竊取網站的用戶信息來製造惡意請求。
    會話Session:
        Session的信息存放在Cookies,以一串隨機的字符串表示,用於標識當前訪問網站的用戶身份,記錄相關用戶信息。
'''
SECRET_KEY = 'nstb+fm4-5oxi8e432bi!w^lty20@a6lb721&byi6^gw_b6)_f'

'''
DEGUG:
    指定調試模式,該值爲布爾值。主要在開發調試階段應設置爲True,在開發調試過程當中會自動檢測代碼是否發生更改,根據檢測
結果執行是否刷新重啓系統。若是項目配置部署上線,應該將其改成False,不然會泄露系統的相關信息。
'''
DEBUG = True

'''
ALLOWED_HOSTS:
    設置可訪問的域名,默認值爲空。當DEBUG爲True而且ALLOWD_HOSTS爲空時,項目只容許以localhost或者127.0.0.1在瀏覽器
上訪問。當DEBUG爲False時,ALLOWED_HOSTS爲必填項,不然程序沒法啓動,若是想容許全部域名訪問,可設置ALLOW_HOSTS=["*"]。
'''
ALLOWED_HOSTS = []

'''
INSTALLED_APPS:
    指定App列表,告訴Django有哪些App。在項目建立時已有admin,auth和session等配置信息,這些都是Django內置的應用功能。
各個功能說明以下:
    admin:
        內置的後臺管理系統。
    auth:
        內置的用戶認證系統。
    contenttypes:
        記錄項目中全部model元數據(Django的ORM框架)。
    sessions:
        Session會話功能,用於標識當前訪問網站的用戶身份,記錄相關用戶信息。
    messages:
        消息提示功能。
    staticfiles:
        查找靜態資源路徑。
        
    舒適提示:
        若是在項目建立了App,必須在App列表INSTALLED_APPS添加App名稱。將MyWeb項目已經建立的App添加到App列表,代碼以下:
'''
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index',
    'user',
]

  

二.靜態資源緩存

  靜態資源指的是網站中不會改變的文件。在通常的應用程序中,靜態資源包括CSS文件,JavaScript文件以及圖片等資源文件。安全

此處簡單介紹如下CSS和JavaScript文件:
  CSS也稱層疊樣式表(Cascading Style Sheets),是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的計算機語言。CSS不只能夠靜態地修飾網頁,還能夠配合各類腳本語言動態地對網頁各元素進行格式化。   Javascript是一種直譯是腳本語言,也是一種動態類型,弱類型,基於原型的語言,內置支持類型。它的解釋器被成爲JavaScript引擎,爲瀏覽器的一部分,普遍用於客戶端的腳本語言,最先是在HTML(標準通用標記語言下的一個應用)網頁上使用的,用來給HTML網頁增長動態功能。

  一個項目在開發過程當中確定須要使用CSS和JavaScript文件,這些靜態文件的存放主要由配置文件setting.py設置,配置信息以下:服務器

'''
STATIC_URL:
    是必須配置的屬性並且不能爲空。若是沒有配置STATICFILES_DIRS,則STATIC_URL只能識別static靜態資源文件夾。
'''
STATIC_URL = '/static/'

'''
STATICFILES_DIRS:
    是可選的配置屬性,屬性值爲列表或元組格式,每一個列表(元組)元素表明一個靜態資源文件夾,這些文件夾可自行命名。
    在瀏覽器上訪問項目的靜態資源時,不管項目的靜態資源文件夾是如何命名的,在瀏覽器上,靜態資源的上級目錄必須爲static,
而static是STATIC_URL的默認屬性值,由於STATIC_URL也是靜態資源的起始URL。
    除此以外,靜態資源配置還有STATIC_ROOT,其做用是方便在服務器上不熟項目,實現服務器和項目之間的映射。STATIC_ROOT主
要收集整個項目的靜態資源並存放在一個新的文件夾,而後由該文件夾與服務器之間的構建映射關係。STATIC_ROOT用於項目生產部署,
在項目開發過程當中做用不大,關於STATIC_ROOT的配置和STATICFILES_DIRS相似。
'''
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'public_static'),
    os.path.join(BASE_DIR,'index/index_static')
]

 

三.模版路徑session

  在Web開發中,模板是一種較爲特殊的HTML文檔。這個HTML文檔嵌入了一些可以讓Python識別的變量和指針,而後程序解析這些變量和指令,生成的完整的HTML網頁並返回給用戶瀏覽。模板是Django裏面的MTV框架模式的T部分,配置模板路徑是告訴Django在解析模板時,如何查找模板所在的位置。建立項目是,Django已經初始的模板配置信息,以下所示:

'''
TEMPLATES:
    模板配置是以列表格式呈現的,每一個元素具備不一樣的含義,其含義說明以下:
    BACKEND:
        定義模板引擎,用於識別模板裏面的變量和指令。內置的模板引擎有Django Templates和jinjia2.jinja2,每一個模板引擎
    都有本身的變量和指令語法。
    
    DIRS:
        設置模板所在路徑,告訴Django在哪一個地方查找模板的位置,默認爲空列表。
        模板配置一般配置DIRS路徑便可。在項目的根目錄和index下分別建立template文件夾。根目錄的templates一般存放共用
    的模板文件,可以供各個App的模板文件調用,該模式符合代碼重複使用的原則。如HTML的<head>部分。index的templates是存
    放當前App所須要使用的模板文件。模板的配置以下所示。
        
    APP_DIRS:
        是否在App裏查找模板文件。
        
    OPTIONS:
        用於填充在RequestContext中上下文的調用函數,通常狀況下不作任何修改。

'''
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            os.path.join(BASE_DIR,'index/index_templates')
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

四.數據庫配置

   數據庫配置是選擇項目所使用的數據庫的類型,不一樣的數據庫須要設置不一樣的數據庫引擎,數據庫引擎用於實現項目與數據的連接,Django提供4種數據庫引擎:'django.db.backends.postgresql','django.db.backends.mysql','django.db.backends.sqlite3'和'django.db.backends.oracle'。建立項目是默認使用Sqlite3數據庫配置信息以下:

'''
DATABASES:
    指定數據庫的類型,以下所示,默認是使用sqlite3。
'''
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

  若是把上面的連接信息改成MySQL數據庫,首先安裝MySQL連接模塊,因爲mysqldb不支持Python3,所以Django2.0不在使用mysqldb做爲MySQL的連接模塊,而選擇了mysqlclient模塊,二者之間在使用上並無太大的差別。在配置MySQL以前,首先安裝mysqlclient模塊,這裏以pip安裝方法爲例,打開CMD窗口並輸入安裝指令「pip install mysqlclient」,等待模塊安裝完成。而後檢測mysqlclient的版本信息,若是mysqlclient版本信息太低,就不符合Django的使用要求。在CMD窗口進入Python交互解釋器進行版本驗證,以下圖所示:

Microsoft Windows [版本 6.1.7601]
版權全部 (c) 2009 Microsoft Corporation。保留全部權利。

C:\Users\yinzhengjie>pip install mysqlclient
Collecting mysqlclient
  Downloading https://files.pythonhosted.org/packages/6f/d5/fee36b78367c275d7542181bd522d7204dbfb4bc2ad2c6de72a738059a92/mysqlclient-1.3.14-cp36-cp36m-win_amd64.whl (266kB)
    100% |████████████████████████████████| 276kB 57kB/s
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.14

C:\Users\yinzhengjie>
C:\Users\yinzhengjie>pip install mysqlclient

  通常狀況下,使用pip安裝mysqlclient模塊都能符合Django的使用要求。若是在開發過程當中發現Django提示mysqlclient版本太低,並且mysqlclient的版本又大雨1.3.7版本,那麼能夠對Django的源碼進行修改,在Python的安裝目錄下找到base文件(「C:\Users\yinzhengjie\softwares\python36\Lib\site-packages\django\db\backends\mysql\base.py」)。

   完成mysqlclient模塊的安裝後,在項目的配置文件setting.py中配置MySQL數據庫連接信息,代碼以下:

'''
DATABASES
    標識指定數據庫的配置信息
    ENGINE
        指定數據庫的類型,此處咱們指定的是mysql。
    NAME
        指定數據庫的名稱
    USER
        指定數據庫的用戶名
    PASSWORD
        指定數據的密碼
    HOST
        指定數據的主機IP地址
    POST
        指定數據庫的端口信息

'''
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'yinzhengjie',
        'USER':'root',
        'PASSWORD':'yinzhengjie',
        'HOST':'172.30.1.2',
        'POST': '3306',
    }
}

  上述連接方式用於連接MySQL裏面一個名爲「yinzhengjie」的數據庫,上述配置只是連接了一個「yinzhengjie」的數據庫,在平常的開發中,有時候連接須要多個數據庫,實現方法以下:

DATABASES = {
    #第一個數據庫
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    
    #第二個數據庫爲mysql
    'yinzhengjie': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'yinzhengjie',
        'USER':'root',
        'PASSWORD':'yinzhengjie',
        'HOST':'172.30.1.2',
        'POST': '3306',
    },
    #第三個數據庫
    'MyDjango': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'MyDjango_db',
        'USER': 'root',
        'PASSWORD': 'yinzhengjie',
        'HOST': '172.30.1.2',
        'POST': '3306',
    }
}

  上述代碼供連接了三個數據庫,分別是「yinzhengjie」,"MyDjango_db"和「db.sqlite3」。「yinzhengjie」,"MyDjango_db"均屬於MySQL數據庫系統,「db.sqlite3」屬於Sqlite3數據庫系統。從DATABASES的數據類型能夠發現是一個數據字典,也就是說若是須要連接多個數據庫,只須要屬性DATABASES中設置不一樣的鍵值對便可實現。

  值得注意的是,本片博客是以MySQL的5.7版本爲例進行介紹的。若是讀者使用的是5.7以上的版本,在Django連接MySQL數據庫時會提示「django.db.utils.OperationalError」的錯誤信息,這是由於MySQL8.0版本的密碼加密方式發生了改變,8.0版本的用戶密碼採用的是cha2加密方法。爲了解決這Django連接MySQL數據的錯誤問題。在MySQL的可視化工具中容許如下SQL語句:

ALTER USER 'root'@'172.30.1.%' IDENTIFIED WITH mysql_native_password BY 'yinzhengjie';

FLUSH PRIVILEGES;

  Django除了支持PostgreSQL,Sqlite3,MySQL和Oracle以外,還支持SQLServer和MangoDB的連接。因爲不一樣的數據庫有不一樣的連接方式,此處不過多介紹,本篇博客以MYSQL連接爲例,若需瞭解其餘數據庫的連接方式,可自行搜索相關資料。

 

五.中間件

   中間件(Middleware)是處理Django的request和response對象的鉤子,當用戶在網站中進行單擊某個按鈕等操做時,這個動做是用戶向網站發送請求(request);而網頁會根據用戶的操做返回相關的網頁內容,這個過程稱爲響應處理(response)。從請求到響應的過程當中,當Django接受到用戶請求時,Django首先通過中間件 處理請求信息,執行相關的處理,而後將處理結果返回給用戶,中間件執行流程以下圖所示:

  從上圖能清晰的看到,中間件的做用主要是處理用戶請求信息。開發者也能夠根據本身的開發需求自定義中間件,只要將自定義的中間件添加到配置屬性MIDDLEWARE中便可激活。通常狀況下,Django默認的中間件配置都可知足大部分的開發需求。在項目的MINDDELEWARE中添加LocalMiddleware中間件,使得Django內置的功能支持中文顯示,代碼以下:

'''
MIDDLEWARE
    配置屬性MIDDLEWARE的數據格式爲列表類型,每一箇中間件的設置順序是固定的,若是隨意變動中間件很容易致使呈現異常。
    SecurityMiddleware:
        內置的安全機制,保護用戶與網站的通訊安全。
    SessionMiddleware:
        會話Session功能。
    LocalMiddleware:
        支持中文語言。
    CommonMiddleware:
        處理請求信息,規範化請求內容。
    CsrfViewMiddleware:
        開啓CSRF防禦功能。
    AuthenticationMiddleware:
        開啓內置的用戶認證系統。
    MessageMiddleware:
        開啓內置的信息提示功能。
    XFrameOptionsMiddleware:
        防止惡意程序點擊劫持。

'''
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.local.LocalMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
相關文章
相關標籤/搜索