TIL65. djangoでアプリケーションを作成する(2)


djangoにデータベースをインストールしますか?
models.pyで作る
障害はユーザーによってデータベースが設定されます.pyで直接設定できます.
レベルは?設計図を意味します.

1. python manage.py migrate=変更を適用します。


migrate:未適用の移行(設定値)を適用するロール

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.モデルをアクティブにする(アプリケーションを使用する)には、を設定します。pyにINSTALLED APPSを登録する必要があります。



上の写真と一緒に投票ソフトを使います.このように宣言したのです.

4. python manage.pymakemigrationsポーリング実行。


Djangoは、モデルを変更し(この場合、新しいモデルを作成した)、これらの変更を移行として保存することを示します.

5. python manage.py migrate


まだ適用されていないすべての移行を収集し、実行します.

apiを遊ぶ


apiとは?


Application Programming Interface
APIはメニュー(コマンドリスト)を整理し、顧客(アプリケーション)が注文し、注文(コマンド)を受け取ったときにシェフ(アプリケーション)と対話して、要求されたメニュー(コマンドの値)を渡す.
簡単に言えば、APIは、プログラムのインタラクションを支援する媒体と見なすことができる.

1. manage.pyが存在するディレクトリでpythonを管理します。pyshellをPython 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.Shellをctrl+zにオフにし、再実行して変更点を検索します。ModelimportChoiceで、質疑応答を行いました。

>>> 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()		# 선택한 것을 지울 수도 있다.