2017年8月1日

Django 實作教學 - 使用 WhiteNoise 處理靜態文件 ( Django - Using WhiteNoise with Django )

這篇文章要介紹如何使用 WhiteNoise 來處理 Django 的靜態文件,為什麼需要特別方式來處理呢?因為,在開發模式下 (Debug 模式開啟),Django 會有一套預設的機制來替你處理靜態文件。然而,在正式環境下 Django 則強烈建議使用其他的方式來 Serve 靜態的資源,如:使用 Nginx、Apache 或者是 AWS S3 等其他方式。如果你的 Web Application 規模較小,WhiteNoise 會是一個相當簡單的方式來 Serve 靜態文件。( 其他 Django 相關教學可以參考本篇整理。If you want to read this article in English, you can visit here )



前置作業
在開始設定之前,若你還沒將環境建立起來的話,先安裝 Django 並建立專案:
# 安裝 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
基本上,WhiteNoise 與 Django 的整合度很好,所以在 settings.py 中就可以完全大部分的設定步驟。跟著以下範例將設定加入 settings.py:
# 將 WhiteNoise 加入 Middleware
MIDDLEWARE = [
    ...
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

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


複製靜態文件
剛剛我們已經設定靜態文件所在位置,接下來需要把各 Application 的靜態資源集中至該位置。而 Django 已經提供了一個簡單的方式:
python manage.py collectstatic --noinput
當以上步驟都完成後,將 Django 啟動後 WhiteNoise 就會自動開始 Serve 靜態資源。


Environment :
  ・ Debian
Reference :
  ・ WhiteNoise

熱門文章