TIL 16 Django CRUD(2)

CastleQ·2021년 5월 25일
1

django

목록 보기
3/5
post-thumbnail

내가 살려고 적는 두번째 장고CRUD

urls.py

VScode를 키고 생성한 프로젝트의 urls.py파일로 이동한다.
urls.py는 요청을 받아 각자의 APP에 연결해주는 역활을 한다.
urls.py라는 파일을 요청을 받는 쪽인 products파일안의 경로로
다시 똑같이 생성해주어야 하는데

부모경로 쪽의 urls.py는 요청에 대한 처리를 할수없기 때문에 요청에 따라 각각의
APP으로 보내주어 (지금의 경우에는 products가 된다.)
products안에 있는 urls.py에서 어떠한 view.py의 클래스에 보내줄지 결정한다.

from django.urls import path, include

urlpatterns = [
    path('products',include('products.urls'))
]
# urlpatterns의 내용을 풀어서 설명하면 products에대한 어떤 요청이 들어오면
# products에 있는 urls.py로 그 요청을 전달한다는 의미이다.

# localhost:8000/products
# GET  제품에 대한 정보를 달라는 요청
# localhost:8000 는 서버주소이다.

# localhost:8000/account/signin
# POST 

urlpatterns가 list인 이유는 한번에 여러경로를 처리할 수 있기 때문이다.

westarbucks폴더 안에 있는 urls.py 코드

products폴더 안에 있는 urls.py 코드


위의 코드 안에는 빈스트링을 두는데
이미 westarbucks폴더 안에 있는 urls.py에서 입력을 했기 때문이다.
만약에 products/(여기) 이공간에 뭔가 경로가 있다면 빈스트링 안에 적어주면 된다.

.as.view()는 요청받은 정보를 get,post,update,delete인지 판별하여
views.py에 있는 클래스내의 메소드를 필터링해 호출해 준다.

views.py

from django.views import View # api 서버에 응답을 뿌려준다.
from django.http import JsonResponse

localhost:8000/products (GET) 요청을 보냈을 때
무조건 성공인 메시지를 보내는 주는 로직을 짜서 통신을 확인해 본다.

JSON의 아주 간단한 개념정리📌

view.py 파일에는 JsonResponse를 import하는데 장고에서 제공해주는 기능이다.
JSON은 파이썬의 dictionary형태를 띈다.
프론트단에서 무언가 요청을 보낼때에도 자바스크립트를 JSON형태로 http요청에 담아서 보낼 것이다. 백단에서도 파이썬안에 리스트로 되어있는 자료를 JSON에 담아서 보낸다.

brew install httpie

MAC터미널에서 brew install httpie를 입력해서
httpie를 설치한다. 설치가 잘 되었으면

이런 화면을 확인할 수 있다.

터미널 창 settings

이렇게 해두면 편하다 !

http 요청해보기

분할된 터미널의 하나에 서버를 띄운다.

htttp --version

입력하여 설치확인을 한다.

http localhost:8000/products

입력하여

서버가 잘 작동하는 것을 확인할 수 있다.

views.py에 로직 구성하기

get요청에 대한 로직을 구성해 보도록 하겠다.
우선 터미널 창에 장고쉘을 활성화 한 후 구성할 코드를 구성해보도록 한다.

위의 코드를 VScode안에 있는 get함수에 작성하는 코드이다
🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽

from django.views import View
from django.http import JsonResponse 
from .models import Menu

class ProductListView(View):
    def get(self, request):
        menus = Menu.objects.all()

        result =[]
        for menu in menus:
            result.append(menu.name)

        return JsonResponse({'result': result}, status=200)

장고쉘에 아래의 명령어를 입력하면

http GET localhost:8000/products

body에 값이 담겨오는 것을 확인할 수 있다.

POST를 해보자 !

name = 카드 vlau를 통신으로 요청을 받아 테이블안에 집어 넣어보자 !

python에서 제공해주는 json변환기능을 import한다

data라는 변수에 reqeust받은 바디값을 json으로 로드해서 저장한 후
Menu객체의 테이블에 name컬럼에
할당된 'name'이라는 dictionary의 키값으로 저장한다.(value는 카드이다)

POST는 status=201 (각 통신마다 어떤 스테이터스 코드를 보내줄지 생각해서 적기 !)

여기서 'name'의 value가 어떤 내용인지 ? key값을 뭐라고 명명할 것인지
이런 세부사항은 요청을 보내는 클라이언트쪽과 결정해서 사용해야 한다.
프론트단과 소통이 중요할 듯 보인다.

 http POST localhost:8000/products name="카드"

라는 request를 client측에서 보내면
구성된 로직이 작동하여

📌📌📌📌📌📌📌📌📌📌📌📌중요📌📌📌📌📌📌📌📌📌📌📌📌
여기서 name이 KEY값이다.

5번에 카드라는 값이 저장되어 있는 것을 확인할 수 있다.

TIP

mac 터미널에서

http -v POST localhost:8000/products name="카드"

하이픈 V를 입력하면 요청한 통신내역을 확인할 수 있다.

예외처리

 def post(self, request):
        try:
            data = json.loads(request.body) #JSON -> PYTHON
            # print(data)
            Menu.objects.create(name=data['name']) # "카드"

            return JsonResponse({'message': 'SUCCESS'}, status=201)

        except KeyError:
            return JsonResponse({'message': 'INVALID_KEY'}, status=400)

예외처리를 해서 KEY값이 오타가 나거나 하면 알려주도록 한다.

profile
DONE IS BETTER THAN PERFECT

0개의 댓글