從settings檔案建立django開發索引
django專案的開發過程中,在對整個框架不夠了解之前,內容僅靠模糊的記憶可能會導致一系列的未知問題(例如一個字母寫錯)。
全域性配置檔案settings中的配置,往往可以對映整個專案所需要的內容。
(django版本1.11)
預設的配置
其實不算是預設的,只是在建立專案之後,已經為我們寫了一些配置(當然,你可以在保證正確的前提下隨意更改它們的順序),在它的基礎上進行更改,我將按預設的順序從上到下進行介紹
1. 主機驗證 ALLOWED_HOSTS
表示此Django站點可以投放的主機/域名的字串列表。這是防止HTTP主機頭部攻擊的安全措施。
- “ * ”表示可以匹配任何ip,在這種情況下,您有責任提供您自己對Host頭的驗證。
- 如果主機頭(或X-Forwarded-Host(如果USE_X_FORWARDED_HOST已啟用))與此列表中的任何值不匹配,則django.http.HttpRequest.get_host()方法將引發SuspiciousOperation。
- 當DEBUG為True並且ALLOWED_HOSTS為空時,主機將針對[‘localhost’,’127.0.0.1’,’[:: 1]’]進行驗證。
- 此驗證僅適用於get_host();如果您的程式碼直接從request.META訪問Host頭,您將繞過此安全保護。
2. INSTALLED_APPS
這應該是django中最常用的配置,在每個app建立之後,儘量都在這裡進行配置
django-simple-captcha是django中的一個驗證碼包,這個包本身也是一個django的app,所以需要寫在這裡,並且別忘了給這個包新增路由。
3. TEMPLATES
這裡是進行模板檔案目錄的配置,往往只需更改圖中紅線標註的位置。
4. DATABASES
DATABASES是進行資料庫的配置,預設的資料庫是sqlite,下圖是更改為mysql之後的配置
注意NAME是指資料庫名
5. 語言和時區
- 這裡的語言配置會影響到admin後臺中的展示語言
- 預設的時間是格林尼治時間,我們處於東八區,配置北京和上海的都可以
6. 靜態檔案配置 STATIC
靜態檔案的配置是為了我們能應用本地的css,js,圖片等;
STATIC_URL已經為我們寫好,我們在加上一個STATICFILES_DIRS(靜態檔案的路徑)
新增的配置
新增的配置是在開發過程根據需要新增在settings檔案中的,排名不分先後,因為整個檔案都是不需要有順序的。可能還不是全部的,但儘量會在使用之後更新.
1. 自定義使用者模型 AUTH_USER_MODEL
配置使用者模型類,就是django中admin後臺的使用者,但是其中的資訊未必有我們需要的欄位,因此我們需要自定義使用者模型,在這裡配置之後,就會不在使用預設的使用者模型
2. 自定義驗證類 AUTHENTICATION_BACKENDS
這是登入時使用的驗證類,同上,因為預設的未必能滿足我們的需求。
3. 郵箱配置EMAIL
這是傳送郵件進行的配置
4. LOGIN_URL
在使用了login_required裝飾器之後,指定沒有登入情況下訪問路由失敗而跳轉的頁面
5. 配置Django伺服器日誌
首先在專案的根目錄下建立一個log資料夾,然後在settings中新增以下內容
在執行專案時就會在log資料夾中生成日誌檔案
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} #日誌格式
},
'filters': {
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/all.log', # 日誌輸出檔案
'maxBytes': 1024*1024*5, # 檔案大小
'backupCount': 5, # 備份份數
'formatter': 'standard', # 使用哪種formatters日誌格式
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/error.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/error.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'scprits_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/script.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
}
},
'loggers': {
'django': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': False
},
'django.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False,
},
'scripts': {
'handlers': ['scprits_handler'],
'level': 'INFO',
'propagate': False
},
'blog.views': {
'handlers': ['default', 'error'],
'level': 'DEBUG',
'propagate': True
},
}
}