五 .Django settings詳解配置

一. settings詳解配置

https://www.django.cn/course/show-10.html       Django2.0入門教程:全局配置settings詳解css

https://blog.csdn.net/Odyssues_lee/article/details/80834438html

http://www.javashuo.com/article/p-myiapuiz-d.html        Django settings詳解python

https://www.jb51.net/article/128678.htmmysql

https://docs.djangoproject.com/en/1.10/topics/settings/     官網配置web

1 .settings詳解

基礎

DJANGO_SETTING_MODULE環境變量:讓settings模塊被包含到python能夠找到的目錄下,開發狀況下不須要,咱們一般會在當前文件夾運行,python能夠搜索到。
若是須要運行在其餘服務器上,就必須指定DJANGO_SETTINGS_MODULE變量。

 默認設定sql

一個django的settings文件不須要咱們手動去設置全部項目,由於系統已經默認設置好了。咱們只須要修改咱們使用的設

定就行了。默認的設置在django/conf/global_settings.py文件中。django在編譯時,先載入global_settings.py中的配置,而後加載指定的settings文件,
重寫改變的設定。 好了,步入正文。 前面的隨筆中咱們常常會改setting配置也常常將一些配置混淆今天主要是將一些常見的配置作一個彙總。

setting配置彙總數據庫

1、app路徑

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'app1.apps.App1Config', 
 # 默認已有 若是沒有隻要添加app名稱便可 例如: 'app1'
 # 新建的應用都要在這裏添加
]

數據庫配置django

若是使用django的默認sqlite3數據庫則不須要改
DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 }
}
若是使用mysql數據庫須要將上述數據庫注掉修改以下

DATABASES = {
 'default': {  
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'blog', #你的數據庫名稱 數據庫須要本身提早建好
 'USER': 'root', #你的數據庫用戶名
 'PASSWORD': '', #你的數據庫密碼
 'HOST': '', #你的數據庫主機,留空默認爲localhost
 'PORT': '3306', #你的數據庫端口
 }
}
而且須要在應用的__init__.py文件添加

import pymysql
pymysql.install_as_MySQLdb()
sql語句

LOGGING = {
 'version': 1,
 'disable_existing_loggers': False,
 'handlers': {
 'console':{
  'level':'DEBUG',
  'class':'logging.StreamHandler',
 },
 },
 'loggers': {
 'django.db.backends': {
  'handlers': ['console'],
  'propagate': True,
  'level':'DEBUG',
 },
 }
} 
當你的操做與數據庫相關時 會將咱們的寫的語句翻譯成sql語句在服務端打印。

靜態文件目錄瀏覽器

STATIC_URL = '/static/' #調用時目錄
STATICFILES_DIRS=[
 os.path.join(BASE_DIR,"static"), #具體路徑
]

若是數據庫中的UserInfo(用戶表)繼承django內置AbstractUser緩存

model需導入

from django.contrib.auth.models import AbstractUser
配置文件

AUTH_USER_MODEL = "應用名.UserInfo"

中間件

本身寫的中間件,例如在項目中的md文件夾下md.py文件中的M1與M2兩個中間件

MIDDLEWARE = [
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'md.md.M1',
 'md.md.M2',
]
注意本身寫的中間件,配置要寫在系統中的後面

session存儲的相關配置

數據庫配置(默認)

Django默認支持Session,而且默認是將Session數據存儲在數據庫中,即:django_session 表中。
配置 settings.py
 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默認)
 SESSION_COOKIE_NAME = "sessionid"   # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認)
 SESSION_COOKIE_PATH = "/"    # Session的cookie保存的路徑(默認)
 SESSION_COOKIE_DOMAIN = None    # Session的cookie保存的域名(默認)
 SESSION_COOKIE_SECURE = False    # 是否Https傳輸cookie(默認)
 SESSION_COOKIE_HTTPONLY = True    # 是否Session的cookie只支持http傳輸(默認)
 SESSION_COOKIE_AGE = 1209600    # Session的cookie失效日期(2周)(默認)
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # 是否關閉瀏覽器使得Session過時(默認)
 SESSION_SAVE_EVERY_REQUEST = False   # 是否每次請求都保存Session,默認修改以後才保存(默認)

緩存配置

配置 settings.py
 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
 SESSION_CACHE_ALIAS = 'default'    # 使用的緩存別名(默認內存緩存,也能夠是memcache),此處別名依賴緩存的設置
 SESSION_COOKIE_NAME = "sessionid"   # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串
 SESSION_COOKIE_PATH = "/"    # Session的cookie保存的路徑
 SESSION_COOKIE_DOMAIN = None    # Session的cookie保存的域名
 SESSION_COOKIE_SECURE = False    # 是否Https傳輸cookie
 SESSION_COOKIE_HTTPONLY = True    # 是否Session的cookie只支持http傳輸
 SESSION_COOKIE_AGE = 1209600    # Session的cookie失效日期(2周)
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # 是否關閉瀏覽器使得Session過時
 SESSION_SAVE_EVERY_REQUEST = False   # 是否每次請求都保存Session,默認修改以後才保存


緩存: https://blog.csdn.net/qq_18863573/article/details/83780589
Django中提供了6種緩存方式
       http://www.javashuo.com/article/p-oosdcowp-q.html         django的緩存實例應用
https://blog.csdn.net/weixin_42134789/article/details/81283167

 

默認配置

配置 settings.py
 SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
 SESSION_FILE_PATH = None     # 緩存文件路徑,若是爲None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir() 
 SESSION_COOKIE_NAME = "sessionid"    # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串
 SESSION_COOKIE_PATH = "/"     # Session的cookie保存的路徑
 SESSION_COOKIE_DOMAIN = None    # Session的cookie保存的域名
 SESSION_COOKIE_SECURE = False    # 是否Https傳輸cookie
 SESSION_COOKIE_HTTPONLY = True    # 是否Session的cookie只支持http傳輸
 SESSION_COOKIE_AGE = 1209600    # Session的cookie失效日期(2周)
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # 是否關閉瀏覽器使得Session過時
 SESSION_SAVE_EVERY_REQUEST = False    # 是否每次請求都保存Session,默認修改以後才保存

注意

也能夠自定義配置 可是自定義的配置都要寫到配置文件最後 代碼中使用時能夠導入配置

from django.conf import settings

settings.配置名

上面全部配置都是針對特定問題須要修改的 系統默認配置不作說明

上面配置只是前面django系列隨筆所遇到的經常使用配置 後續所遇配置都會逐步在此隨筆中持續添加跟新

Django APPEND_SLASH 參數自動給網址結尾加'/'

http://www.javashuo.com/article/p-dxiairhb-w.html

Django seetings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數爲 APPEND_SLASH = True。 做用就是自動在網址結尾加'/'。
以下URL視圖:

urls.py:
--------
from django.conf.urls.defaults import *
from mysite.views import hello
 
urlpatterns = patterns('',
('^hello/$', hello),
)
因定義了hello/結尾:

http://example.com/hello
 
自動轉到
 
http://example.com/hello/
默認地,任何不匹配或尾部沒有斜槓(/)的申請URL,將被重定向至尾部包含斜槓的相同字眼的URL。
當 seetings.py 設置爲 APPEND_SLASH = False 時,訪問 http://example.com/hello 將會返回 404
因此我以爲仍是按照官方默認開啓這個參數方便些,若是不想要後面的 / ,能夠在 urls.py 定義成 '^hello$' 這樣的形式。


2. 下面看段django settings最佳配置實例代碼,具體代碼以下所示:

# encoding=utf-8
import os
import socket
SITE_ID = 1
# 項目的根目錄
# 簡化後面的操做
PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))
# 加載應用
# 把應用添加到INSTALLED_APPS中
from apps.kuser.mysetting import myapp as kuser_app
from apps.blog.mysetting import myapp as blog_app
MY_APPS = blog_app + kuser_app
# 加載靜態文件
from apps.blog.mysetting import my_staticfiles as blog_staticfiles
from apps.kuser.mysetting import my_staticfiles as kuser_staticfiles
MY_STATIC_DIRS = blog_staticfiles + kuser_staticfiles
# 加載模板文件
from apps.blog.mysetting import my_templates as blog_templates
from apps.kuser.mysetting import my_templates as kuser_templates
MY_TEMPLATE_DIRS = blog_templates + kuser_templates
# 密鑰配置
# 適用於開發環境和部署環境
# 能夠從系統環境中,配置文件中,和硬編碼的配置中獲得密鑰
try:
 SECRET_KEY = os.environ['SECRET_KEY']
except:
 try:
 with open(os.path.join(PROJECT_ROOT, 'db/secret_key').replace('\\', '/')) as f:
  SECRET_KEY = f.read().strip()
 except:
 SECRET_KEY = '*lk^6@0l0(iulgar$j)faff&^(^u+qk3j73d18@&+ur^xuTxY'
# 獲得主機名
def hostname():
 sys = os.name
 if sys == 'nt':
 hostname = os.getenv('computername')
 return hostname
 elif sys == 'posix':
 host = os.popen('echo $HOSTNAME')
 try:
  hostname = host.read()
  return hostname
 finally:
  host.close()
 else:
 raise RuntimeError('Unkwon hostname')
#調試和模板調試配置
#主機名相同則爲開發環境,不一樣則爲部署環境
#ALLOWED_HOSTS只在調試環境中才能爲空
if socket.gethostname().lower() == hostname().lower():
 DEBUG = TEMPLATE_DEBUG = True
 ALLOWED_HOSTS = []
else:
 ALLOWED_HOSTS = [
 'baidu.com',
 '0.0.0.0',
 ]
 DEBUG = TEMPLATE_DEBUG = False
#數據庫配置
MYDB = {
 'mysql': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'books', #你的數據庫名稱
 'USER': 'root', #你的數據庫用戶名
 'PASSWORD': '', #你的數據庫密碼
 'HOST': '', #你的數據庫主機,留空默認爲localhost
 'PORT': '3306', #你的數據庫端口
 },
 'sqlite': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(PROJECT_ROOT, 'db/db.sqlite3').replace('\\', '/'),
 }
}
# 給靜態文件url一個後綴,在templates裏用到的。
# 映射到靜態文件的url
# STATIC_URL的含義與MEDIA_URL相似
STATIC_URL = '/static/'
# 總的static目錄
# 可使用命令 manage.py collectstatic 自動收集static文件
# STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static').replace('\\', '/')
#放各個app的static目錄及公共的static目錄
#STATICFILES_DIRS:和TEMPLATE_DIRS的含義差很少,就是除了各個app的static目錄之外還須要管理的靜態文件設置,
#好比項目的公共文件差很少。而後給靜態文件變量賦值,告訴Django,靜態文件在哪裏
#另外,Django提供了一個findstatic命令來查找指定的靜態文件所在的目錄,例如:D:\TestDjango>python manage.py findstatic Chrome.jpg
# 默認狀況下(若是沒有修改STATICFILES_FINDERS的話),Django首先會在STATICFILES_DIRS配置的文件夾中尋找靜態文件,而後再從每一個app的static子目錄下查找,
# 而且返回找到的第一個文件。因此咱們能夠將全局的靜態文件放在STATICFILES_DIRS配置的目錄中,將app獨有的靜態文件放在app的static子目錄中。
# 存放的時候按類別存放在static目錄的子目錄下,如圖片都放在images文件夾中,全部的CSS都放在css文件夾中,全部的js文件都放在js文件夾中。
STATICFILES_DIRS = (
 ("downloads", os.path.join(PROJECT_ROOT, 'static/downloads').replace('\\', '/')),
 ("uploads", os.path.join(PROJECT_ROOT, 'static/uploads').replace('\\', '/')),
)
# 將app中的靜態文件添加到靜態文件配置列表中
STATICFILES_DIRS += MY_STATIC_DIRS
# 最後關鍵的部分是STATICFILES_DIRS如下配置
# 簡要說一下,static文件夾在項目裏,有css js images 三個文件夾(看項目結構),他們的路徑分別是:
# os.path.join(STATIC_ROOT,'css'),os.path.join(STATIC_ROOT,'js'),os.path.join(STATIC_ROOT,'images');
# 咱們分別給他們起三個別名css,js,images(你能夠隨意給,不過爲了易記,咱們原名稱指定別名了)
TEMPLATE_DIRS = (
 os.path.join(PROJECT_ROOT, 'templates').replace('\\', '/'),
)
# 配置應用的模板文件路徑
TEMPLATE_DIRS += MY_TEMPLATE_DIRS
# 配置緩存
 CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': 'unix:/tmp/memcached.sock',
  'KEY_PREFIX': 'lcfcn',
  'TIMEOUT': None
 }
 }
LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/auth/login/'
LOGOUT_URL = '/auth/logout/'
# 指用戶上傳的文件,好比在Model裏面的FileFIeld,ImageField上傳的文件。若是你定義
# MEDIA_ROOT=c:\temp\media,那麼File=models.FileField(upload_to="abc/"),上傳的文件就會被保存到c:\temp\media\abc。MEDIA_ROOT必須是本地路徑的絕對路徑。
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'static/uploads')
# MEDIA_URL是指從瀏覽器訪問時的地址前綴。
MEDIA_URL = '/uploads/'
# 應用註冊列表
INSTALLED_APPS = (
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'django.contrib.sitemaps',
)
#爲了避免和系統應用混合,本身開發的應用放在這裏
# 將本身寫的app添加到應用列表中去
INSTALLED_APPS += MY_APPS
# django 中間件
# django處理一個Request的過程是首先經過django 中間件,而後再經過默認的URL方式進行的。
# 因此說咱們要作的就是在django 中間件這個地方把全部Request攔截住,
# 用咱們本身的方式完成處理之後直接返回Response,那麼咱們能夠簡化原來的設計思路,
# 把中間件不能處理的 Request通通無論,丟給Django去處理。
MIDDLEWARE_CLASSES = (
 'django.middleware.cache.UpdateCacheMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware',
)
ROOT_URLCONF = 'lcforum.urls'
WSGI_APPLICATION = 'lcforum.wsgi.application'
#數據庫配置
DATABASES = {
 'default': MYDB.get('sqlite'),
}
# 語言
LANGUAGE_CODE = 'zh-cn'
# 時區
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
# 在template中使用靜態文件
# 採用這種方式須要有一些額外配置,打開settings.py,確認TEMPLATE_CONTEXT_PROCESSORS中包含有'django.core.context_processors.static'
# TEMPLATE_CONTEXT_PROCESSORS = (
# 'django.core.context_processors.debug',
# 'django.core.context_processors.i18n',
# 'django.core.context_processors.media',
# 'django.core.context_processors.static',
# 'django.contrib.auth.context_processors.auth',
# 'django.contrib.messages.context_processors.messages',
#
# 'django.core.context_processors.tz',
# 'django.contrib.messages.context_processors.messages',
# # 'blog.context_processors.custom_proc',自定義函數
# )
#from django.conf import settings
#gettext = lambda s: s
#getattr()
# 假設有個工程djangodemo,有兩個app爲demo1跟demo2
# django處理static的方法是把各個app各自的static合併到一處
# 好比:
# djangodemo/djangodemo/static 放置公共靜態文件
# djangodemo/demo1/static 放置該app本身的靜態文件
# djangodemo/demo2/static 放置該app本身的靜態文件
# 能夠這麼設置:
# STATIC_ROOT = '/www/djangodemo/djangodemo/static '
# STATIC_URL = '/static/'
# STATICFILES_DIRS = (
# 'djangodemo/static',
# 'demo1/static/',
# 'demo2/static/',
# )
# 使用命令
# manage.py collectstatic
# 就會自動把全部靜態文件所有複製到STATIC_ROOT中
# 若是開啓了admin,這一步是很必要的,否則部署到生產環境的時候會找不到樣式文件
# 不要把你項目的靜態文件放到這個目錄。這個目錄只有在運行manage.py collectstatic時纔會用到

 

 

"""
Django settings for webpy project.

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

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 = '^iu$_ug#e@1ju15vx+3bbru!zf^xtvo4=x3v2_h*x8nggpy$1%'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ["*"]

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
    'app02',
    'app03',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'webpy.urls'

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',
            ],
        },
    },
]

WSGI_APPLICATION = 'webpy.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "db4",    #create DATABASE Dear1;
        'USER': "root",
        'PASSWORD':'root',
        'HOST':'localhost',
        'PORT':'3306',
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# 漢化時間
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
# 靜態文件 例如 css js img 等配置
STATIC_URL = '/static/'

STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'app01/static'), # 意思在myapp項目下的static
    os.path.join(BASE_DIR, 'app02/static'),  # 意思在myapp項目下的static
    os.path.join(BASE_DIR, 'app03/static'),  # 意思在myapp項目下的static
]
# https://cloud.tencent.com/info/5baf18f587c0b9f5630aebe8121ef38c.html
# 運行python manage.py collectstatic收集全部已安裝的APP的靜態文件到根目錄的collectedstatic【即STATIC_ROOT】中
# 上傳目錄配置文件
MDEIA_ROOT=os.path.join (BASE_DIR, r'static\upfile')
相關文章
相關標籤/搜索