Django settings詳解css
1.基礎python
DJANGO_SETTING_MODULE環境變量:讓settings模塊被包含到python能夠找到的目錄下,開發狀況下不須要,咱們一般會在當前文件夾運行,python能夠搜索到。若是須要運行在其餘服務器上,就必須指定DJANGO_SETTINGS_MODULE變量。mysql
2.默認設定sql
一個django的settings文件不須要咱們手動去設置全部項目,由於系統已經默認設置好了。咱們只須要修改咱們使用的設數據庫
定就行了。默認的設置在django/conf/global_settings.py文件中。django在編譯時,先載入global_settings.py中的配置,而後加載指定的settings文件,重寫改變的設定。django
好了,步入正文。瀏覽器
前面的隨筆中咱們常常會改setting配置也常常將一些配置混淆今天主要是將一些常見的配置作一個彙總。緩存
setting配置彙總服務器
一、app路徑cookie
1
2
3
4
5
6
7
8
9
10
11
|
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的默認sqlite3數據庫則不須要改
1
2
3
4
5
6
|
DATABASES
=
{
'default'
: {
'ENGINE'
:
'django.db.backends.sqlite3'
,
'NAME'
: os.path.join(BASE_DIR,
'db.sqlite3'
),
}
}
|
若是使用mysql數據庫須要將上述數據庫注掉修改以下
1
2
3
4
5
6
7
8
9
10
|
DATABASES
=
{
'default'
: {
'ENGINE'
:
'django.db.backends.mysql'
,
'NAME'
:
'blog'
,
#你的數據庫名稱 數據庫須要本身提早建好
'USER'
:
'root'
,
#你的數據庫用戶名
'PASSWORD'
: '',
#你的數據庫密碼
'HOST'
: '',
#你的數據庫主機,留空默認爲localhost
'PORT'
:
'3306'
,
#你的數據庫端口
}
}
|
而且須要在應用的__init__.py文件添加
1
2
|
import
pymysql
pymysql.install_as_MySQLdb()
|
詳情能夠查看:http://www.jb51.net/article/128674.htm
三、sql語句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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語句在服務端打印。
四、靜態文件目錄
1
2
3
4
|
STATIC_URL
=
'/static/'
#調用時目錄
STATICFILES_DIRS
=
[
os.path.join(BASE_DIR,
"static"
),
#具體路徑
]
|
五、若是數據庫中的UserInfo(用戶表)繼承django內置AbstractUser
1)model需導入
1
|
from
django.contrib.auth.models
import
AbstractUser
|
2)配置文件
1
|
AUTH_USER_MODEL
=
"應用名.UserInfo"
|
六、中間件
本身寫的中間件,例如在項目中的md文件夾下md.py文件中的M1與M2兩個中間件
1
2
3
4
5
6
7
8
9
10
11
|
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存儲的相關配置
1)數據庫配置(默認)
1
2
3
4
5
6
7
8
9
10
11
|
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,默認修改以後才保存(默認)
|
2)緩存配置
1
2
3
4
5
6
7
8
9
10
11
|
配置 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,默認修改以後才保存
|
3)默認配置
1
2
3
4
5
6
7
8
9
10
11
|
配置 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,默認修改以後才保存
|
注意:
1)也能夠自定義配置 可是自定義的配置都要寫到配置文件最後 代碼中使用時能夠導入配置
1
2
|
from
django.conf
import
settings
settings.配置名
|
2)上面全部配置都是針對特定問題須要修改的 系統默認配置不作說明
3)上面配置只是前面django系列隨筆所遇到的經常使用配置 後續所遇配置都會逐步在此隨筆中持續添加跟新
下面看段django settings最佳配置實例代碼,具體代碼以下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
# 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時纔會用到
|