Django(3)

signet·2021년 1월 31일
0

C.R.U.D (2)

models.py를 작성하여 데이터베이스를 생성하면, 그 이후는 프론트의 요청에 따라 데이터베이스를 수정할 수 있도록 하는 것이 필요하다.

1. HTTP

프론트에서 들어오는 요청은 기본적으로 HTTP형식을 따른다. 이는 웹페이지를 주고받는 형식을 말하는데, 요청과 그에 따른 응답으로 구성된다. 프론트에서 자료와 함께 요청을 보내면, 백에서는 그 요청에 맞는 데이터를 응답할 필요가 있다. 흔히 사용하는 요청은 프론트의 입장에서 자료를 가져오는 GET과 자료를 보내는 POST가 있다. 그 외에도 PUT, PATCH, DELETE등의 요청이 존재한다. 이때, 백의 입장에서는 GET요청에 따라 데이터를 '보내줘야'하고, POST요청과 함께 작성된 자료들을 데이터베이스에 '받아야'한다.

2. views.py

app 디렉토리에 작성해야 하는 이 파일은 필요한 데이터를 모델에서 가져와서 웹페이지를 구성하도록 만드는 역할을 한다. 프론트에서 보낸 요청을 파라메터로 받고 그에 따라 적절한 응답을 돌려주는 메소드 형태로 작성한다. 이때, 프론트에서는 요청에 따라 적절한 자료를 보낼 때가 있는데, 이는 Json형식으로 되어 있기 때문에 이를 적절히 처리할 수 있도록 해줄 필요가 있다. 이를 위해

import json#json데이터를 가공하는 클래스
from django.http import HttpResponse, JsonResponse #응답형식

from django.view import View 
from app경로 import classes in app

를 적어준다. 그 이후, 각각의 화면에 맞는 요청을 메소드로 가지는 클래스를 작성한다. 이때, 메소드에 데이터는 데이터베이스와 소통해야 하므로, 쉘에서 사용하는 명령과 동일하게 작성해야 한다. 예를 들어, 원하는 상품 데이터를 모두 가져오고자 하는 프론트의 요청에 대해서

def get(self, request):
	products = Product.objects.all()
	results = []
	for product in products:
		results.append(                 
        {
                  "menu":product.categories.menu.name,
                  "category":product.categories.name,
                  "product":product.name
             }
         )
	return JsonResponse({'results':results}, status=200) 

같이 작성해 볼 수 있다. 이때, 돌려주는 데이터는 쿼리셋이 아닌 리스트 형태여야 하는 것에 반해, 쉘에서 사용하는 명령어들의 상당수는 쿼리셋을 반환하기 때문에 추가적인 처리가 필요한 경우가 많다.

3. urls.py

HTTP소통은 결국 URL주소를 통해 이루어지는데, 메인페이지와 앱을 연결하는 역할 등을 수행하는 파일이다. 메인 폴더와 앱폴더 마다 하나씩 존재하고, 메인 URL을 중심으로 앱을 중계한다고 볼 수 있을 것 같다. 이때 메인 폴더에는

from django.urls import path, include

를 import해줘야 하고, include메소드로 앱의 url과 연결해주어야 한다.

0개의 댓글