Facebook TDD Django 스터디 그룹을 위해 작성된 글입니다.
교재 Test driven development with Python (번역서 : 파이선을 이용한 클린코드를 위한 테스트 주도 개발)
http://www.obeythetestinggoat.com/
Django App 내에서는 Django 환경을 모두 이용할 수 있습니다.
간혹 Django app 이 아니면서도 Django 모듈을 써야할 경우가 있습니다.
자동화 스크립트를 만들고 싶을 때 이러한 스크립트가 필요합니다.
이 스크립트의 요구조건은
- Virtual env 를 불러와서 가상환경을 가져와야 합니다.
- django.setup() 을 불러야 하고
- Django app 모듈을 자유롭게 불러와야 합니다.
- 이 스크립트는 실행위치에 따른 의존성이 없는 것이 좋습니다.
(어떤 경로에 스크립트가 있어도 실행이 가능해야 한다는 의미입니다)
1번은 의외로 간단합니다.
가상환경의 python 실행 경로를 첫줄에 적어주면 됩니다.
2번은 os 환경변수설정을 하고 django.setup() 을 호출 합니다.
django.setup() 에서 상대경로를 인식할 수 있도록
sys.path 에 프로젝트 루트 경로를 추가합니다.
manage.py 가 하는 역할이 바로 ...
3번, 4번은 sys.path 에 경로 추가로 해결
아래 스크립트는 교재에 있는 Item list 를 모두 가져오는 스크립트입니다.
경로 위치는 각각 환경에 맞도록 수정해야겠지요?
#!/Users/agile/dev/tdd/vtdd/bin/python
import os
import sys
PROJECT_ROOT='/Users/agile/dev/tdd/tddjango/superlists/'
sys.path.append(os.path.dirname(PROJECT_ROOT))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "superlists.settings")
import django
django.setup()
from lists.models import Item
for item in Item.objects.all():
print(item.text)