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() # 선택한 것을 지울 수도 있다.
Author And Source
이 문제에 관하여(TIL65. django로 앱 만들어보기(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dnjs0718/TIL64.-django로-앱만들어보기2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)