가장 많이 사용하는 Django 명령어 순위를 뽑아보면 당연히 아래의 명령어들이 상위에 있을 것이다.
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
python manage.py startapps
python manage.py createsuperuser
하지만 장고를 사용하는 4개월 동안 단 한번도 이 manage.py가 무슨 일을 하는지 생각해본적이 없다..
하지만 문득 얘는 뭘하는 애지 라는 생각이 들었고. python manage.py something 을 작성했을 때 무슨 일이 일어나는지 관련된 명령어들에 대한 분석을 해보려고 했다.
이번 글은 그런 글들 중 첫번째 글로 python manage.py을 작성했을 때 무슨 일이 일어나는지 작성해보려고 한다.
먼저 python manage.py 는 manage.py를 실행시키는 건 모두들 알 것이다. 그렇다면 manage.py로 들어가보자
manage.py 코드는 다음과 같다.
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
1. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
먼저 첫번째 코드는 환경변수에 'DJANGO_SETTINGS_MODULE'라는 이름으로 config.local.settings라는 문자열을 등록시켜주는 명령어 이다. 아마 settings.py가 프로젝트 전역에서 사용되기 때문에 이런식으로 환경변수로 넣어 준 것 같고 이를 확인해보기 위해선 아래처럼 작성해주면된다.
python manage.py shell
>> import os
>> os.environ
2. execute_from_command_line(sys.argv)
두번째 코드는 다음과 같다.
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
다음 코드는 django.core.management 로 부터 execute_from_command_line 이라는 함수를 가져오는 코드로 import에 실패하면 장고가 제대로 다운로드 되지 않을 것이므로 ImpotError 에러 메세지를 전달하고 아니라면 execute_from_command_line(sys.argv)를 실행 시켜준다.
여기서 sys.argv는 command line(terminal)에서 파이썬 스크립트를 실행시킬 때 python 뒤에 오는 모든 문자열이다. 이를 확인해보기 위해선 현재 디렉토리에 다음과 같이 test.py를 작성해서 저장해주자.
#test.py
import sys
if __name__=='__main__':
print(sys.argv)
저장 후에 아래와 같이 터미널에서 작성해주면 다음과 같이 출력된다.
python test.py something
['test.py', 'something']
정리해보면 manage.py는 settings,py의 위치를 환경변수로 등록시켜주고 뒤에 오는 arguments들을 이용 execute_from_command_line을 실행 시켜주는 것을 알 수 있다. 다음 글에서는 argument에 따른 execute from_command_line이 어떤 식으로 동작하는지 알아보도록 하자. 먼저 제일 자주 사용하는 runserver편이다.
https://cocook.tistory.com/126
'Web Programming > Django' 카테고리의 다른 글
[Django] Form 동적으로 생성하기 (0) | 2021.03.27 |
---|---|
[Django] 이미지 파일업데이트시 기존 파일 삭제하기 (0) | 2021.03.08 |
[Django] Django Template 인덱스 사용하기 (0) | 2021.02.22 |
[Django] Django에서 DB 엑셀 파일 생성하는 방법 (2) | 2021.02.17 |
[Django] django apache (CentOS) 배포 (0) | 2021.01.26 |