一、基本配置信息
""" Django settings for myblog project. Generated by 'django-admin startproject' using Django 2.2. For more information on this file, see https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.2/ref/settings/ """ import os # 項目路徑 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # 密鑰配置 # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'y#-jmza4^h1bq!wj&_8y0t8x1j+t@uzm)1-t816ln)g-7b@roh' # SECURITY WARNING: don't run with debug turned on in production! # 調試模式 DEBUG = True # 域名訪問權限 ALLOWED_HOSTS = ['*'] # Application definition # App列表 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'account', # 用戶信息 'album', # 圖片牆信息 'article', # 文章信息 'interflow', # 留言板信息 ]
- 項目路徑BASE_DIR:主要通過os模塊讀取當前項目在計算機系統的具體路徑,該代碼在創建項目的時候自動生成,一般不需要更改。
- 密鑰配置SECRET_KET:這是一個隨機值,在項目創建的時候自動生成,一般情況不需要更改。主要用於重要數據的加密處理,提高項目的安全性,避免遭到攻擊者的惡意破壞。密鑰主要用於用戶密碼、CSRF機制和會話Session等數據加密。
- 用戶密碼:Django內置一套Auth認證系統,該系統具有用戶認證和存儲用戶信息等功能。在創建用戶的時候,將用戶密鑰進行加密處理,保證用戶安全性。
- CSRF機制:該機制主要用於表單提交,防止竊取網站的用戶信息來製造惡意請求。
- 會話Session:Session的信息存放在Cookie中,以一串隨機字符串表示,用於標識當前訪問網站的用戶的身份,記錄相關用戶信息。
- 調試模式DEBUG:該值爲布爾值。如果在開發調試階段,那麼應該設置爲True,在開發調試過程中會自動檢測代碼是否更改,根據檢測結果執行是否刷新重啓系統。如果項目部署上線,那麼應該將其改爲False,否則會泄露項目的相關信息。
- 域名訪問權限ALLOW_HOSTS:設置可訪問的域名,默認值爲空列表。當DEBUG=True並且ALLOW_HOSTS=[]時,項目只允許已localhost或127.0.0.1在瀏覽器上訪問。當DEBUG=False時,ALLOW_HOSTS是必填項,否則程序無法啓動,如果想允許所有域名訪問可設置ALLOW_HOSTS=['*']。
- App列表INSTALLED_APPS:告訴Django有哪些App。在項目創建時,已有admin、auth和session等配置信息,這些都是Django內置的應用功能。如下:
- admin:內置的後臺管理系統。
- auth:內置的用戶認證系統。
- contenttypes:記錄項目中所有的model元數據(Django的ORM框架)。
- sessions:Session會話功能,用於標識當前訪問網站的用戶身份,記錄相關用戶信息。
- messages:消息提示功能。
- staticfiles:查找靜態資源路徑。
二、資源文件配置
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ # 資源路由 STATIC_URL = '/static/' # 資源集合 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'publicStatic')] # 資源部署 # STATIC_ROOT = os.path.join(BASE_DIR, 'publicStatic') # 設置媒體資源保存路徑 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Django資源文件配置分爲靜態資源和媒體資源。
- Debug模式下只能識別項目應用APP的static文件夾裏的靜態資源,如果文件夾改爲其他名字,Django就無法識別;若將static文件夾放在別的路徑下,Django也是無法識別的。
- 若資源路由STATIC_URL的值爲/static/,則瀏覽器訪問靜態的網站必須爲static。
- 由於STATIC_URL的特殊性,若靜態文件夾存放在項目的根目錄或定義多個靜態文件夾,可使用資源集合STATICFILES_DIRS列表。
- STATIC_ROOT作用是在服務器上部署項目,實現服務器和項目之間的映射。收集(python manage.py collectstatic)整個項目的靜態資源並放在一個新的文件夾,然後由該文件夾與服務器之間構建映射關係。Debug=True時,Django提供靜態文件代理服務,無需設置。
- 媒體資源和靜態資源可以共存,兩者可獨立運行,互不影響。
- 配置媒體資源後,還需要將media文件夾註冊到Django裏
-
from django.contrib import admin from django.urls import path, re_path # 導入項目應用 from .views import index # 配置媒體文件夾media from django.views.static import serve from django.conf import settings urlpatterns = [ path('admin/', admin.site.urls), path('', index), # 配置媒體文件的路由地址 re_path('meida/(?P<path>.*)', serve, ('document_root': settings.MEDIA_ROOT), name='media'), ]
三、模板文件配置
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, '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', ], }, }, ]
- BACKEND:定義模板引擎,用於識別模板裏的變量和指令。內置模板引擎有DjangoTemplates和jinja2.jinja2,每個模板引擎都有自己的變量和指令語法。
- DIRS:設置模板所在路徑。默認空列表。根目錄的templates存放共用的模板文件。
- APP_DIRS:是否在app裏查找模板文件,默認True。
- OPTIONS:用於填充在RequestContext的上下文(模板裏的變量和指令),一般情況下不做任何修改。
四、數據庫配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 'ENGINE': 'django.db.backends.mysql', #'NAME': DB_NAME, #'USER': DB_USER, #'PASSWORD': DB_PASSWORD, #'HOST': DB_HOST, #'PORT': DB_PORT, } }
- 不同數據庫需設置不同數據庫引擎,Django提供4種數據庫引擎
- 'django.db.backends.mysql'
- 'django.db.backends.postgresql'
- 'django.db.backends.sqlite3'
- 'django.db.backends.oracle'
使用mysql需要做下適配mysqldb不支持python3,Django2.0以上版本不再使用mysqldb作爲MySQL的連接模塊,而選擇mysqlclient模塊,兩者使用上沒有太大差異。也可使用pymysql模塊連接MySQL,需在MyDjango的init文件裏設置數據庫連接模塊
-
import pymysql pymysql.install_as_MySQLdb()
- 數據庫配置列表可配置多個數據庫連接
五、中間件
中間件(Middleware)是一個用來處理Django的請求(Reuqest)和響應(Response)的框架級別的鉤子,它是一個輕量級、低級別的插件系統,用於在全局範圍內改變Django的輸入和輸出。
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'corsheaders.middleware.CorsMiddleware', ]
- 每個中間件的設置順序是固定的,若隨意變更中間件很容易導致程序異常
- SecurityMiddleware:內置的安全機制,保護網站和用戶的通信安全
- SessionMiddleware:會話Session功能
- LocaleMiddleware:國際化和本地化功能
- CommonMiddleware:處理請求信息,規範化請求內容
- CsrfViewMiddleware:開啓CSRF防護功能
- AuthenticationMiddleware:開啓內置用戶認證系統
- MessageMiddleware:開啓內置消息提示功能
- XFrameOptionMiddleware:防止惡意程序單擊劫持
- CorsMiddlware(django-cors_headers第三方庫):設置跨域訪問