0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Djangoプロジェクトのデフォルト設定をカスタムしよう!

Last updated at Posted at 2023-03-16

経緯

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の変更とか)があったりしますが、そこは飛ばしてます。
希望があればまた今度。

お疲れ様でした。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?