Django Web应用开发实战第二章
生活随笔
收集整理的這篇文章主要介紹了
Django Web应用开发实战第二章
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、基本配置信息
"""
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!
# 調(diào)試模式
DEBUG = True
# 域名訪問權(quán)限
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模塊讀取當(dāng)前項目在計算機(jī)系統(tǒng)的具體路徑,該代碼在創(chuàng)建項目的時候自動生成,一般不需要更改。
- 密鑰配置SECRET_KET:這是一個隨機(jī)值,在項目創(chuàng)建的時候自動生成,一般情況不需要更改。主要用于重要數(shù)據(jù)的加密處理,提高項目的安全性,避免遭到攻擊者的惡意破壞。密鑰主要用于用戶密碼、CSRF機(jī)制和會話Session等數(shù)據(jù)加密。
- 用戶密碼:Django內(nèi)置一套Auth認(rèn)證系統(tǒng),該系統(tǒng)具有用戶認(rèn)證和存儲用戶信息等功能。在創(chuàng)建用戶的時候,將用戶密鑰進(jìn)行加密處理,保證用戶安全性。
- CSRF機(jī)制:該機(jī)制主要用于表單提交,防止竊取網(wǎng)站的用戶信息來制造惡意請求。
- 會話Session:Session的信息存放在Cookie中,以一串隨機(jī)字符串表示,用于標(biāo)識當(dāng)前訪問網(wǎng)站的用戶的身份,記錄相關(guān)用戶信息。
- 調(diào)試模式DEBUG:該值為布爾值。如果在開發(fā)調(diào)試階段,那么應(yīng)該設(shè)置為True,在開發(fā)調(diào)試過程中會自動檢測代碼是否更改,根據(jù)檢測結(jié)果執(zhí)行是否刷新重啟系統(tǒng)。如果項目部署上線,那么應(yīng)該將其改為False,否則會泄露項目的相關(guān)信息。
- 域名訪問權(quán)限ALLOW_HOSTS:設(shè)置可訪問的域名,默認(rèn)值為空列表。當(dāng)DEBUG=True并且ALLOW_HOSTS=[]時,項目只允許已localhost或127.0.0.1在瀏覽器上訪問。當(dāng)DEBUG=False時,ALLOW_HOSTS是必填項,否則程序無法啟動,如果想允許所有域名訪問可設(shè)置ALLOW_HOSTS=['*']。
- App列表INSTALLED_APPS:告訴Django有哪些App。在項目創(chuàng)建時,已有admin、auth和session等配置信息,這些都是Django內(nèi)置的應(yīng)用功能。如下:
- admin:內(nèi)置的后臺管理系統(tǒng)。
- auth:內(nèi)置的用戶認(rèn)證系統(tǒng)。
- contenttypes:記錄項目中所有的model元數(shù)據(jù)(Django的ORM框架)。
- sessions:Session會話功能,用于標(biāo)識當(dāng)前訪問網(wǎng)站的用戶身份,記錄相關(guān)用戶信息。
- messages:消息提示功能。
- staticfiles:查找靜態(tài)資源路徑。
二、資源文件配置
# 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') # 設(shè)置媒體資源保存路徑
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Django資源文件配置分為靜態(tài)資源和媒體資源。
- Debug模式下只能識別項目應(yīng)用APP的static文件夾里的靜態(tài)資源,如果文件夾改為其他名字,Django就無法識別;若將static文件夾放在別的路徑下,Django也是無法識別的。
- 若資源路由STATIC_URL的值為/static/,則瀏覽器訪問靜態(tài)的網(wǎng)站必須為static。
- 由于STATIC_URL的特殊性,若靜態(tài)文件夾存放在項目的根目錄或定義多個靜態(tài)文件夾,可使用資源集合STATICFILES_DIRS列表。
- STATIC_ROOT作用是在服務(wù)器上部署項目,實現(xiàn)服務(wù)器和項目之間的映射。收集(python manage.py collectstatic)整個項目的靜態(tài)資源并放在一個新的文件夾,然后由該文件夾與服務(wù)器之間構(gòu)建映射關(guān)系。Debug=True時,Django提供靜態(tài)文件代理服務(wù),無需設(shè)置。
- 媒體資源和靜態(tài)資源可以共存,兩者可獨立運(yùn)行,互不影響。
- 配置媒體資源后,還需要將media文件夾注冊到Django里
from django.contrib import admin
from django.urls import path, re_path # 導(dǎo)入項目應(yīng)用
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:定義模板引擎,用于識別模板里的變量和指令。內(nèi)置模板引擎有DjangoTemplates和jinja2.jinja2,每個模板引擎都有自己的變量和指令語法。
- DIRS:設(shè)置模板所在路徑。默認(rèn)空列表。根目錄的templates存放共用的模板文件。
- APP_DIRS:是否在app里查找模板文件,默認(rèn)True。
- OPTIONS:用于填充在RequestContext的上下文(模板里的變量和指令),一般情況下不做任何修改。
四、數(shù)據(jù)庫配置
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,
}
}
- 不同數(shù)據(jù)庫需設(shè)置不同數(shù)據(jù)庫引擎,Django提供4種數(shù)據(jù)庫引擎
- 'django.db.backends.mysql'
- 'django.db.backends.postgresql'
- 'django.db.backends.sqlite3'
- 'django.db.backends.oracle'
-
import pymysql pymysql.install_as_MySQLdb()
- 數(shù)據(jù)庫配置列表可配置多個數(shù)據(jù)庫連接
使用mysql需要做下適配mysqldb不支持python3,Django2.0以上版本不再使用mysqldb作為MySQL的連接模塊,而選擇mysqlclient模塊,兩者使用上沒有太大差異。也可使用pymysql模塊連接MySQL,需在MyDjango的init文件里設(shè)置數(shù)據(jù)庫連接模塊
五、中間件
中間件(Middleware)是一個用來處理Django的請求(Reuqest)和響應(yīng)(Response)的框架級別的鉤子,它是一個輕量級、低級別的插件系統(tǒng),用于在全局范圍內(nèi)改變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',
]
- 每個中間件的設(shè)置順序是固定的,若隨意變更中間件很容易導(dǎo)致程序異常
- SecurityMiddleware:內(nèi)置的安全機(jī)制,保護(hù)網(wǎng)站和用戶的通信安全
- SessionMiddleware:會話Session功能
- LocaleMiddleware:國際化和本地化功能
- CommonMiddleware:處理請求信息,規(guī)范化請求內(nèi)容
- CsrfViewMiddleware:開啟CSRF防護(hù)功能
- AuthenticationMiddleware:開啟內(nèi)置用戶認(rèn)證系統(tǒng)
- MessageMiddleware:開啟內(nèi)置消息提示功能
- XFrameOptionMiddleware:防止惡意程序單擊劫持
- CorsMiddlware(django-cors_headers第三方庫):設(shè)置跨域訪問
總結(jié)
以上是生活随笔為你收集整理的Django Web应用开发实战第二章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增值税怎么计算 进项的税额=不含税销售收
- 下一篇: gcc、g++命令