뷰(View)는 애플리케이션의 로직을 넣는 곳이다.뷰는 model에서 필요한 정보를 받아와 템플릿에 전달하는 역할을 한다.
템플릿 : 서로 다른 정보를 일정한 형태로 표시하기 위해 재사용 가능한 파일
장고는 URLconf ( URL configuration )
을 사용한다. URLconf
는 장고에서 URL과 일치하는 뷰를 찾기 위한 패턴들의 집합이다.
각 앱의 url들을 mapping하기 위해서는 메인 urls.py
에 include
함수를 사용하여 포함 시켜 주어야 한다.
urlpatterns = [
path('admin/',admin.site.urls),
path('',include('앱.urls')),
]
path('api/',include('api.urls'))
api/ ..
형식으로 mapping이 된다. verbose_name
과 동일하게 사용가능 ) Django RestFramework 는 Django 안에서 Restful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈 소스 라이브러리 이다. HTML로 렌더링하는 웹 서버가 아닌 JSON 혹은 XML과 같은 형식을 통해 데이터를 다루는 별도의 API 서버가 필요하다.
장점
1. 범용성이 좋은 웹 브라우저 API를 사용한 쉬운 개발
2. OAuth1,OAuth2 를 위한 추가적인 패키지가 인증 정책에 추가되어 있는 경우
3. DB data 를 Json으로 직렬화(Serialize) 기능
4. 다수 기업 사용 -> 커뮤니티 잘 됨
serializer는 데이터를 직렬화 할 수 있게 도와준다. DB에 각종 데이터가 있다고 하면 해당 내용들을 JSON 혹은 Dict로 직렬화 할 수 있다.
파이썬 형식의 코드를 다른 네트워크 환경과의 통신을 위해 직렬화시 DRF에서 직렬화는 담당하는 클래스, queryset,model instance등의 복잡한 데이터를 python datatype으로 변환시켜 json,xml등의 컨텐츠 타입으로의 변환을 쉽게 만들어준다.
python 객체나 django에서 queryset등 복잡한 객체들을 REST API 에서 사용 가능하게 json 형태로 변환해준다.
매개변수로 serializer할 모델을 받고 해당 모델을 직렬화하여 반환
from rest_framework import serializers
class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serialziers.CharField(max_length=200)
created = serializers.DateTimeField()
serializer = CommentSerializer(comment)
serializer.data
# {'email':'yoo@example.com','content':'foo bar','created':'2022-..' }
IntegerField(max_value=None,min_value=None)
데이터를 request body로부터 받아서 다시 복잡한 데이터로 변환해주는 작업 , 직렬화된 데이터를 받는 측에서 사용하기 위해 다시 구조체로 만드는 과정.
serializer내의 클래스로, 이미 models.py에서 작성해둔 필드에 맞는 serializer를 만들 수 있도록 해주는 지름길과 같다. 각 모델 인스턴스를 model_to_dict 과정이 없이 쉽게 직렬화 할 수 있게 해주는 것이다.
Meta class 에 model에서 사용할 필드의 이름을 fileds로 지정해주면 따로 선언 없이 사용이 가능 ( mapping이나 메소드가 필요한 경우 따로 선언해 주기 )
custom field : 기본적으로 model에 등록된 필드 값들은 Meta 클래스에 추가해줌으로써 다뤄줄 수 있지만 커스텀 필드는 새로 정의한 후 field에 별도로 등록해주어야 serializer 조회 시 함께 return 해줄 수 있다.
APIView에는 CBV(Class-Based-View)와 FBV(Function-Based-View) 두가지 방법을 제공한다.