Django - 使用 WhiteNoise 處理靜態文件

Aug 3, 2017 Djnago English

在這篇文章,我將介紹如何使用 WhiteNoise 處理靜態文件。你或許會有疑問,為什麼我們需要額外的軟體來處理靜態文件?原因是在開發環境下 Django 會提供一個預設的機制來處理靜態資源的請求,但是在正式環境下 Django 團隊強烈建議使用其他的方式來處理,例如:使用 Nginx、Apache 和 AWS S3。因此,當你的 Django 應用是一個 MVP 或是流量較低的網站,WhiteNoise 就成為一個簡單的解決方案。



前置準備

若你還未將環境設定好,你可以使用以下指令快速建立專案:

# 安裝 Django
python -m pip install Django

# 查看 Django 版本
python -m django --version

# 建立 Django 專案
django-admin startproject <project-name>

專案的預設結構如下:

project-name/
├── project-name
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py


安裝 WhiteNoise

使用 pip 安裝 WhiteNoise 會是最簡單的方式:

python -m pip install whitenoise


設定 WhiteNoise

基本上,我們不需要在這步驟做太多事情,我們只需要將以下的設定加入至 settings.py 即可:

# 將 WhiteNoise 加入 middlewares
MIDDLEWARE = [
    ...
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

# 設定靜態文件所在位置
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

當然,你可以在文件中找到更多參數。

複製靜態資源

既然我們已經在設定檔中指定靜態資源的位置,因此我們需要複製各個應用的靜態資源並放到該處。幸運地,Django 已經提供了簡單的指令:

python manage.py collectstatic --noinput

當以上步驟都完成後,將 Django 啟動後 WhiteNoise 就會自動開始接手處理靜態資源的請求。別忘了,當 Debug 模式開啟後 Django 的預設處理機制會自動接手處理。


你也可能會喜歡:




若對於文章內容有任何建議與指正,非常歡迎你告訴我或者與我一起討論 ! :)

zeckli.devforgalaxy@gmail.com   © 2015-2019 zeckli, thanks to Jekyll and GitHub.