1. 程式人生 > >從settings檔案建立django開發索引

從settings檔案建立django開發索引

  django專案的開發過程中,在對整個框架不夠了解之前,內容僅靠模糊的記憶可能會導致一系列的未知問題(例如一個字母寫錯)。
  全域性配置檔案settings中的配置,往往可以對映整個專案所需要的內容。
  (django版本1.11)

預設的配置

  其實不算是預設的,只是在建立專案之後,已經為我們寫了一些配置(當然,你可以在保證正確的前提下隨意更改它們的順序),在它的基礎上進行更改,我將按預設的順序從上到下進行介紹

1. 主機驗證 ALLOWED_HOSTS

  表示此Django站點可以投放的主機/域名的字串列表。這是防止HTTP主機頭部攻擊的安全措施。
ALLOWED_HOSTS

  • “ * ”表示可以匹配任何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建立之後,儘量都在這裡進行配置

INSTALLED_APPS
  django-simple-captcha是django中的一個驗證碼包,這個包本身也是一個django的app,所以需要寫在這裡,並且別忘了給這個包新增路由。

3. TEMPLATES

這裡是進行模板檔案目錄的配置,往往只需更改圖中紅線標註的位置。

TEMPLATES

4. DATABASES

  DATABASES是進行資料庫的配置,預設的資料庫是sqlite,下圖是更改為mysql之後的配置

DATABASES
  注意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裝飾器之後,指定沒有登入情況下訪問路由失敗而跳轉的頁面
LOGIN_URL

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