経緯
pythonのwebフレームワークであるDjangoの標準設定を毎度変更するのに飽きたのでshellスクリプトで実行してもらうべく作った内容の覚書です。
実行環境
実行環境は以下のとおりです。
- OS:
- Mac
- installed lib:
- pip
- venv
ただタイムゾーンや言語設定を変えるだけだと面白くないので、Djangoでもホットリロード機能を使ってサクサク開発できるようにdjango-livereload-serverライブラリを追加設定しています。
使い方や詳細については下記リンクを確認してください。
django-livereload-server (GitHub Link)
How to use django-livereload-server (Youtube Link)
コード
setupCustomDjango.sh (ターミナル)
#! /bin/bash
echo "プロジェクト名を指定してください :"
read project_name
# 定数に入替
readonly PROJECT_NAME=$project_name
# 実行環境の名前を取得 macの場合はDarwinが戻り値
current_os_name=`uname`
mac_name=Darwin
if [ $current_os_name != $mac_name ]; then
echo "MacOS以外です"
exit 0
else
# echo "Mac環境下での実行内容"
python -m venv venv
source venv/bin/activate
django-admin startproject $PROJECT_NAME
cd $PROJECT_NAME
pip install --upgrade pip
echo \n
pip install django
echo \n
# hot reloadのライブラリ
pip install django-livereload-server
echo "venv\\nstatic\\n${PROJECT_NAME}/__pycache__" > .gitignore
# pip list
pip freeze > requirements.txt
fi
cd $PROJECT_NAME
fileName="settings"
function replaceStringFunc()
{
local readonly TMP_TYPE="tmp"
local readonly TARGET_TYPE="py"
if [ $4 = "lang" ] || [ $4 = "tz" ];then
sed -e "s/$1/$2/" $3.$TARGET_TYPE > $3.$TMP_TYPE
elif [ $4 = "apps" ];then
# livereloadは置換対象の前に追記すること
sed -e "s/$1/$2\\n $1/" $3.$TARGET_TYPE > $3.$TMP_TYPE
elif [ $4 = "middleware" ];then
sed -e "s/$1/$1\\n $2/" $3.$TARGET_TYPE > $3.$TMP_TYPE
fi
# ファイル削除
rm $3.$TARGET_TYPE
# ファイルの拡張子書き換え
mv $3.$TMP_TYPE $3.$TARGET_TYPE
}
# ============================
# 言語設定を英語から日本語に変更
rep1before="en-us"
rep1after="ja"
targetContent="lang"
replaceStringFunc $rep1before $rep1after $fileName $targetContent
# ============================
# ============================
# タイムゾーンをアメリカから東京に変更
rep2before="UTC"
rep2after="Asia\/Tokyo"
targetContent="tz"
replaceStringFunc $rep2before $rep2after $fileName $targetContent
# ============================
# ============================
# INSTALLED_APPSのstaticfilesの項目の直前に追加
rep3before='\"django.contrib.staticfiles\"'
rep3after='\"livereload\"\,'
targetContent="apps"
replaceStringFunc $rep3before $rep3after $fileName $targetContent
# ============================
# ============================
# MIDDLEWAREに追加
rep4before='\"django.middleware.clickjacking\.XFrameOptionsMiddleware\"\,'
rep4after='\"livereload.middleware.LiveReloadScript\"\,'
targetContent="middleware"
replaceStringFunc $rep4before $rep4after $fileName $targetContent
# ============================
echo "
下記の順番でターミナルを2つ立てて実行してください
============================
※まず仮想環境を立ててプロジェクトフォルダに入ってください
source venv/bin/activate
cd ${PROJECT_NAME}
※ホットリロードライブラリを起動させてください
python manage.py livereload
※ このコマンドは別のターミナルを立ててください
cd ${PROJECT_NAME}
python manage.py runserver
============================
"
# if文の記述方法
# https://tex2e.github.io/blog/shell/bash-and-or
あとはこのファイルをターミナルで実行するだけです
ターミナル
sh setupCustomDjango.sh
プロジェクト名を聞かれるのでターミナルで入力しましょう。
envに関する設定も初期設定でできるといいなとも思うので、それも時間があればいつか追記したいと思います。
作ったプロジェクトでのhot reloadを実感するには他にも追加しないといけないファイル(templatesにhtmlだったり、urls.pyやviews.pyの変更とか)があったりしますが、そこは飛ばしてます。
希望があればまた今度。
お疲れ様でした。