주절주절 서론
앞선 포스팅들이 Django의 기본적인 사용법과 설명이었다면, 이번에는 새로운 뷰를 만들고 접속하는 방법에 대해 알아보려고 합니다!
다른 포스팅을 보면 아시겠지만... 저는 코딩과 친했지만, 절교 후 다시 친해지는 중이고, 그 중 웹이랑 가장 사이가 안좋습니다...
이런 저도 친해지기 위해 노력 중이니, 여러분도 하실 수 있습니다!!
포기하지말고, 제 포스팅과 Chatgpt, 구글링을 통해 같이 성장해봐요!
1. Model?
모델에 대한 설명 이전, Django에서의 데이터베이스 정의
해당 링크를 한 번 더 읽으시는 걸 추천드립니다!
model은 데이터베이스 구조를 정의하는 중요한 요소로, 데이터베이스의 Table입니다!
2. Django Shell 실행
$ python manage.py shell
해당 명령어를 실행하면, Django shell이 실행되는 것을 확인할 수 있습니다!
3. 모델 Import
Django Shell이 정상적으로 실행되었다면, 앞서 생성했던 Question, Choice 모델을 확인해봐야겠죠??
>>> from polls.models import *
>>> Question
<class 'polls.models.Question'>
>>> Choice
<class 'polls.models.Choice'>
위와 같이 from polls.models import *을 통해 polls라는 app의 모든 model을 import 한 후, 성공적으로 모델들이 확인되는 것을 확인할 수 있습니다!
4. 모델 내 데이터 확인하기!
모델이 성공적으로 import 된 것을 확인했으니, 어떠한 데이터를 갖고 있는지 확인해보겠습니다!
>>> Question.objects.all()
<QuerySet [<Question: 제목: 개구리와 두꺼비?, 날짜: 2024-10-07 05:43:09+00:00>, <Question: 제목: 강아지와 고양이?, 날짜: 2024-10-07 05:43:40+00:00>, <Question: 제목: 커피 vs 녹차, 날짜: 2024-10-07 06:21:32.035790+00:00>, <Question: 제목: abc???, 날짜: 2024-10-07 06:26:07.771684+00:00>, <Question: NEW!!! 제목: 새로운 질문입니까?, 날짜: 2024-10-08 06:13:48.793866+00:00>]>
되게 많은 데이터가 나오는 것을 확인할 수 있습니다! (+ 제가 막 넣은 거 맞습니다..)
.all()을 하여 모든 데이터를 가져왔기에, 보기 불편한 감이 없지않아 있는데요??
첫번째 데이터만 가져와서, 해당 값의 속성에 직접 접근하여 데이터를 확인해보도록 하겠습니다!
>>> q = Question.objects.first() # Question의 첫번째 값에 접근!
>>> q.id
1
>>> q.question_text
'개구리와 두꺼비?'
>>> q.pub_date
datetime.datetime(2024, 10, 7, 5, 43, 9, tzinfo=datetime.timezone.utc)
성공적으로 Question 모델의 첫번째 값에 접근하여, 데이터를 가져오는 것을 확인할 수 있었습니다!!
동일하게 마지막 값에 접근하고 싶다면 .first()가 아닌 .last()를 사용하실 수 있으며, .all()[인덱스]를 통한 특정 인덱스의 요소 접근도 가능합니다!
5. 새로운 Object 생성하기!
새로운 Object, 즉 Table에 데이터를 추가해보고자 합니다!
이를 shell에서 어떻게 할까요??
데이터베이스에서는 INSERT 구문을 통해 데이터를 추가했다면, shell에서는 해당 모델의 객체를 생성하여 .save()메소드를 호출하면 데이터를 추가할 수 있습니다!
Question 모델에 데이터를 추가해보도록 하겠습니다!
>>> new_q = Question(question_text="새로운 질문이 만들어 졌을까요?")
>>> new_q.save()
>>> print(Question.objects.last())
제목: 새로운 질문이 만들어 졌을까요?, 날짜: 2024-10-08 13:39:45.439971+00:00
마지막 데이터를 조회했을때, 성공적으로 데이터가 저장된 것을 확인할 수 있습니다!
이제 Question을 참조하는 Choice 오브젝트에도 데이터를 추가하고 싶은 경우, 데이터를 추가하는 2가지 방법에 대해서 알아보도록 하겠습니다!
# 방법 1
>>> new_q.choice_set.create(choice_text="네")
<Choice: 질문: 새로운 질문이 만들어 졌을까요?, 답변 네>
# 방법 2
>>> new_choice = Choice(choice_text='아니오', question=new_q)
>>> new_choice.save()
>>> print(new_q.choice_set.all())
<QuerySet [<Choice: 질문: 새로운 질문이 만들어 졌을까요?, 답변 네>, <Choice: 질문: 새로운 질문이 만들어 졌을까요?, 답변 아니오>]>
새롭게 만든 new_q를 참조하는 2개의 Choice 오브젝트가 생성된 것을 확인할 수 있습니다!
6. 데이터 수정하기 (UPDATE!)
데이터베이스에서 데이터를 수정하기 위해, UPDATE 문을 사용합니다.
shell에서는 해당 과정이 어떻게 일어나는지 확인해보도록 하겠습니다!
>>> print(Question.objects.last())
제목: 새로운 질문이 만들어 졌을까요?, 날짜: 2024-10-08 13:39:45.439971+00:00
# 질문 변경!
>>> new_q.question_text = '질문바꿔버리기!!!'
>>> new_q.save()
>>> print(Question.objects.last())
제목: 질문바꿔버리기!!!, 날짜: 2024-10-08 13:39:45.439971+00:00
이렇게 바꾸고자 하는 데이터의 요소에 접근하여, 값을 바꿀 수 있다는 것을 확인할 수 있었습니다!
7. 데이터 삭제하기 (DELETE!)
앞서 CRUD의 CRU를 모두 확인했다면, 이제 D. DELETE를 확인할 차례입니다!
shell에서도 동일하게 .delete() 메소드를 통해 삭제가 가능합니다!
>>> new_q.delete()
# Choice의 Question에 대한 외래키 참조 옵션을 CASCADE로 설정하였기에, 참조하고 있는 Choice 오브젝트 또한 삭제되는 것을 확인 가능!
(3, {'polls.Choice': 2, 'polls.Question': 1})
# 마지막 Question 오브젝트 출력 시 다른 데이터가 출력되는 것을 확인 가능!
>>> print(Question.objects.last())
제목: 새로운 질문입니까?, 날짜: 2024-10-08 06:13:48.793866+00:00
이렇게 참조 옵션 또한, 설정한 옵션으로 처리되는 것을 확인할 수 있었습니다!
8. Code TO Query
앞에서한 실습 모두 shell을 통해 코드를 작성하여 쿼리의 작성 없이, 데이터를 조작했습니다!
이런 데이터 조작을 쿼리로 보고 싶다면 어떻게 하는지 알아보도록 하겠습니다!
>>> print(new_q.choice_set.all().query)
SELECT "polls_choice"."id", "polls_choice"."question_id", "polls_choice"."choice_text", "polls_choice"."votes" FROM "polls_choice" WHERE "polls_choice"."question_id" = 6
같은 코드이지만, 뒤에 .query를 추가하여 실제로 해당 코드가 어떤 쿼리로 실행된 것인지 확인이 가능합니다!
마치며..
이번에는 Django를 shell을 통해 다루는 포스팅을 진행하였습니다!
다음 포스팅 또한 shell을 다루는 내용에 대해서 포스팅을 진행할 예정입니다. 굉장히 양이 많아서, 포스팅 하나에 다 담아내려다가, 시간이 사라지겠어요...
오늘 포스팅도 봐주셔서 감사합니다!
'Django' 카테고리의 다른 글
[Django] Django - 5 (View & Template) (0) | 2024.10.10 |
---|---|
[Django] Django - 4 (Handling models in shell - Part 2) (0) | 2024.10.10 |
[Django] Django - 2 (Admin) (0) | 2024.10.08 |
[Django] Django - 1 (개념 및 실습) (2) | 2024.10.07 |