Django migrate, runserver 쉘 스크립트 작성하기

Reading time ~1 minute

자주 사용하는 명령어들을 쉘 스크립트를로 만들어서 사용하면 편리하다. Django를 이용하면서 python manage.py migrate, python manage.py runserver 등의 반복적으로 사용하는 명령어들을 하나의 스크립트로 작성해서 사용하고 있다.

myrunserver.sh

#!/bin/sh

PROJECT_DIR=$(cd "$(dirname "$0")" && pwd)
DB_FILE=$PROJECT_DIR/db.sqlite3

if [ -f "$DB_FILE" ]; then
    rm $DB_FILE
fi

cd $PROJECT_DIR
python3 manage.py migrate
python3 manage.py runserver

database 파일이 존재하면 제거하고 migrate 후에 서버를 실행시키는 스크립트이다.


dirname $0

dirname

$ dirname 경로 or 경로 + 파일 형태로 사용하고 결과로는 디렉토리의 경로가 반환된다. 입력에 따라 상대경로 이면 상대경로를, 절대경로이면 절대경로를 반환한다.

$ dirname /jihun/test.sh
/jihun
$ dirname /jihun/testdir
/jihun
$ dirname ../test/test.sh
../test

$0

명령 라인이 아닌 쉘 스크립트 파일에서 실행될 경우 경로를 포함한 파일명을 반환한다.

$ echo 'echo $0' > test.sh
$ sh ./test.sh
./test.sh
$ sh /jihun/test.sh
/jihun/test.sh

실행된 스크립트 경로 구하기

PROJECT_DIR=$(cd "$(dirname "$0")" && pwd)
echo $PROJECT_DIR

와 같이 이용하면 어떤 경로에서 스크립트를 실행 하는지에 상관없이 실행된 스크립트 파일의 절대 경로를 알아낼 수 있다.

dirname "$0" 명령으로 알아낸 쉘 스크립트 파일 위치로 이동한 후 pwd 명령으로 경로를 얻고, 변수에 저장하여 사용한다.

Django User model password hashing 하기

Django의 Auth User model을 사용하면 password를 hashing 해서 관리한다. 하지만 User를 생성하거나 Password를 변경할 때 password 가 hashing 되지 않고 원래의 값이 저장 되는데, 이 때문에 ...… Continue reading