[Django]C.R.U.D (3)
2021. 8. 26. 20:45ㆍ코딩일지/Django

1. GET Method를 이용한 READ
※ Views.py 작성
# C.R.U.D (2)의 class OwnersView와 CatsView의 아래에 맞춰서 써주시면 됩니다!
- 자원(resource)을 읽어 올 때, http Method 중에 GET Method를 사용합니다.
import json
from django.http import JsonResponse
from django.views import View
from newproject.models import Owner, Cat
class OwnersView(View):
def post(self, request):
data = json.loads(request.body)
Owner.objects.create(
name = data['name'],
email = data['email'],
age = data['owner_age'],
)
return JsonResponse({'MESSAGE':'CREATED'}, status=201)
def get(self, request):
owners = Owner.objects.all()
results = []
for owner in owners:
cat_list = []
results.append(
{
'name' : owner.name,
'email' : owner.email,
'owner_age' : owner.age,
'cats_list' : cat_list,
}
)
★cats = owner.cat_set.all()
for cat in cats:
cat_list.append(
{
'name' : cat.name,
'cat_age' : cat.cat_age,
}
)
return JsonResponse({'result':results}, statue=200)
class CatsView(View):
def post(self, request):
data = json.loads(request.body)
Cat.objects.create(
name = data['name'],
cat_age = data['cat_age'],
owner_id = data['owner_id'],
)
return JsonResponse({'MESSAGE':'CREATED'}, status=201)
def get(self, request):
cats = Cat.objects.all()
results = []
for cat in cats:
results.append(
{
'name' : cat.name,
'cat_age' : cat.cat_age,
'owner' : cat.owner.name,
}
)
return JsonResponse({'results':results}, status=200)


★ cat은 ForeignKey로 연결되있는 owner를 부르는 것 정 참조로 객체의 데이터를 캐싱해올 수 있지만, owner는 자신을 바라보는 cats를 알 수 없기 때문에 set_all이라는 역참조를 통해서 자신에게 연결된 객체의 데이터를 불러올수있다.
#urls. py는 C.R.U.D (2)에서 이미 작성했기 때문에 넘어가겠습니다.
2. httpie(client)로 django server에 요청 보내기
- django 서버 가동
python manage.py runserver

- httpie(client)로 GET을 사용해 django server 요청 (owners) 역참조


- httpie(client)로 GET을 사용해 django server 요청 (cats) 정 참조

주인에게 foreignkey로 연결된 cats들을 역참 조하여서 주인을 부르면 고양이들의 목록을 불러올 수 있게끔 보여줄 수 있다.
반대로, 고양이들에게는 주인들의 id가 foreignkey로 연결되어있기에 고양이들의 목록을 보면 주인들의 목록을 볼 수 있다.
httpie로 프런트 엔드 역할을 대신하여 urls.py로 요청(Request)을 하여 Views.py 에서 백엔드 영역인 Models와 Databases로 들어가서 자료를 불러옵니다.
그리고 다시 반대로 응답(Response)을 해서 httpie로 호출결과가 보여줌으로써 프론트엔드와 백엔드의 해야할 업무와 C(create). R(read). U(update). D(delete)에 대해서 작게나마 실습할 수 있어서 배움이 많았습니다.
감사합니다.

'코딩일지 > Django' 카테고리의 다른 글
| [Djagno] Westagram 회원가입 기능 구현 (0) | 2021.08.29 |
|---|---|
| [Django] ManytoManyField (0) | 2021.08.26 |
| [Django] C.R.U.D (2) (0) | 2021.08.21 |
| [Django] C.R.U.D (1) (0) | 2021.08.19 |
| [Django] Project Setting (0) | 2021.08.18 |