TIL65. django로 앱 만들어보기(2)

django에서 데이터베이스 설치는?
models.py에서 한다.

장고는 데이터베이스를 사용자가 settings.py에서 직접 설정할 수 있다.

클래스는? 설계도를 의미한다.

1. python manage.py migrate = 변경사항을 적용한다.

migrate: 적용되지 않은 migrations들을(설정값들을) 적용시키는 역할

2. polls/models.py를 들어가서


from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)        # 질문지는 문자열이며 최대글자는 200자이다.
    pub_date = models.DateTimeField('date published')       # 시간타입으로 입력되며 언제자로 날짜가 지정되었다를 알려준다.


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)    # 제일중요! Question을 사용하고 (foreign key) question 클래스를 참조하겠다 라는 의미이다. / 케스케이드는 질문이 끝나면 답변도 끝난다는 것을 의미한다.
    choice_text = models.CharField(max_length=200)		# 초이스 텍스트는 문자열이며 최대 200글자이다.
    votes = models.IntegerField(default=0)		# 투표수는 정수형으로 나타내며 기본값은 0이다.

3. 모델을 활성화(앱 사용) 하려면 settings.py 안에 INSTALLED_APPS에 등록을 해야한다.

위의 사진과 같이 polls 앱을 사용하겠습니다. 라고 선언을 하는 것이다.

4. python manage.py makemigrations polls 실행한다.

모델을 변경시킨 사실과(이 경우에는 새로운 모델을 만들었습니다) 이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려준다.

5. python manage.py migrate

아직 적용되지 않은 마이그레이션을 모두 수집해 실행한다.

api 가지고 놀기

api란?

Application Programming Interface

API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달합니다.
쉽게 말해, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있습니다.

1. manage.py가 있는 디렉토리에서 python manage.py shell을 입력하여 파이썬 쉘에 진입한다.

2. >>>

from polls.models import Choice, Question  # polls디렉토리 안에 있는 models에서 Choice와 Question을 가져온다.
>>> Question.objects.all()	# Question 안에 있는 모든것을 가져온다.
<QuerySet []>

>>> from django.utils import timezone		# timezone함수를 불러온다.

>>> q = Question(question_text="What's new?", pub_date=timezone.now())		# q라는 변수에 아까작성한 Question함수에 알맞는 형식으로 값을 넣는다.


>>> q.save()		# 작성을 한 후 save()를 이용해 저장한다.

>>> q.id
1

>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

>>> q.question_text = "안녕하세요"
>>> q.save()
>> q.question_text
'안녕하세요'

>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>		# object가 1개 있다.

3. polls/models.py를 조금 수정해봤다. Question.objects.all()을 쓸 때 안에 있는 데이터를 못보니까 답답했다. 그래서 클래스안에 def를 넣어 넣은값을 볼 수 있게 해봤다.

4. 바뀐점을 찾기 위해 쉘을 ctrl+ z로 종료 후에 다시 실행시킨 후 from polls.models import Choice,Question을 하였다.

>>> Question.objects.all()
<QuerySet [<Question: 안녕하세요>]>		# 1이 아닌 문자가 출력되는 것을 볼 수 있다.

>>> Question.objects.filter(id=1)		# id가 1인 값을 불러오기
<QuerySet [<Question: 안녕하세요>]>
>>> Question.objects.filter(question_text__startswith='안녕')		# 안녕으로 시작하는 값 불러오기
<QuerySet [<Question: 안녕하세요>]>

>>> Question.objects.get(id=2)			# id 2번은 정해지지 않았기 때문에 에러가 난다.
Traceback (most recent call last):
    ...
DoesNotExist: Question matching query does not exist.

>>> q = Question.objects.get(pk=1)		# 프라이머리 키로도 호출 할 수 있다.
<Question: 안녕하세요>

>>> q.choice_set.all()		# 질문에 대한 답을 지정해 줄 것이다. 지금은 아무것도 없는 빈 상태이다.
<QuerySet []>
>>> q.choice_set.create(choice_text = 'Not much', votes = 0)
<Choice: Not much>
>>> q.choice_set.create(choice_text = 'The sky', votes = 0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text = 'Just hacking again', votes = 0)		# 3개의 보기를 만들었다.

>>> c.question
<Question: 안녕하세요>

>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>	# 보기를 나열했다.


>>> q.choice_set.count()		# 답안은 3개이다.
3

>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()		# 선택한 것을 지울 수도 있다.

좋은 웹페이지 즐겨찾기