2023. 3. 20. 16:15ㆍ개발/토막난 상식
다이나믹한 웹 사이트를 만들기 어렵다.
물론, 장고 템플릿 시스템을 사용하는 것만으로도 충분히 많은 걸 할 수 있음(예시) 장고 공식 문서)
대부분 장고를 백엔드, 어드민 패널, 그리고 json API로만 사용함.
장고를 백엔드로만 사용하고 리액트를 UI로 사용하는 게 추세
>> django rest api framework (산업 표준)
리엑트는 다이나막에 최적화
html대신 json을 전달해주면 리엑트가 이쁘게 ui를 만들어줌
json > 테이터 형식
restapi 설계 방법
1. 동사를 없애자 (명사로만 구성)
2. http메소드로 구성하자 (get post 등)
작동원리
쿼리셋이란 무엇인가요? 핵심만 말하자면, 쿼리셋(QuerySet)은 전달받은 모델의 객체 목록입니다. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬을 할 수 있습니다.
>>>>>시리얼라이져(번역기)>>>>>
Serializer는 django 모델을 JSON으로 변환하는데 필요함.
또한, user로부터 받은 데이터를 django 모델로 변환하는데에도 serializer가 필요함
JSON은 JavaScript 객체 리터럴, 배열, 스칼라 데이터를 표현하는 텍스트 기반의 방식입니다. JSON은 상대적으로 쉽게 읽고 작성할 수 있고, 소프트웨어에서 파싱 및 생성하기도 쉽습니다.
https://www.youtube.com/watch?v=4DxHX95Lq2U
CategorySerializer는 하나의 category에 대해서 번역을 하고 있기 때문에
# 리스트를 번역하기 위해 many 옵션 필요
1. serializer는 user로부터 데이터를 받아 장고 모델을 만드는데 필요하다
2. CategorySerializer -> 이미 데이터 모양을 알고 있기때문
3. so serializer에게 데이터의 형태를 알려줘야한다
4. 데이터베이스에서 넘어오는 django 객체를 번역하고 싶다면 CategorySeraializer에 모델의 인스턴스인 category를 첫번째 인자로 넘겨주면 된다
5. serializer를 한번만 만들어두면 객체가 django모델에서 user쪽에서 원하는 것으로 번역해줄수 있다
6. serializer에게 user가 created_at과 pk는 보내지 않는다고 말하려면 read_only = True
7. serializer에게 어떤게 필요한지만 알려주면 된다 그럼 모델을 django에서 json으로 변역해줄거고 검증을 거쳐서 user데이터로 부터 모델을 만들수 있게해준다
1. serializer는 단순한 번역기이다
2. 사용자가 우리 서버로 데이터를 보낼수 있게 하면서 request.data를 통해 데이터를 보낼수 있다
3. 우리는 사용자를 신뢰하지 못하기 때문에
is_valid
serializer.save()는 serializer의 create메소드를 부를것이다
update같은 경우는 사용자가 수정하고 싶어하는 category의 데이터와 사용자가 보낸 데이터로 만들것이다
기본값 -> instance.name
API의 상세한 부분을 작업할 때, 항상 get_object로 객체를 가져온 뒤
get, put, delete method에서 공유한다. (Django REST Framework의 컨벤션임)
as_view()의 역할은 요청이 GET이면 'get' 메서드를 실행시키는 거고 POST이면 'post' 메서드를 실행시키는 것이다.
추가적 테크닉
믹스인
객체 지향 프로그래밍 언어에서 믹스인(mixin 또는 mix-in)[1][2][3]은 다른 클래스의 부모클래스가 되지 않으면서 다른 클래스에서 사용할 수 있는 메서드를 포함하는 클래스이다. 다른 클래스가 믹스인의 메소드에 액세스하는 방법은 언어에 따라 다르다. 믹스인은 때때로 "상속"이 아니라 "포함"으로 설명된다.
믹스인은 코드재사용성을 높이고 다중상속으로 인해 발생할 수 있는 상속의 모호성 문제("다이아몬드 문제")를 제거하거나 언어에서 다중상속에 대한 지원부족을 해결하기 위해 사용될 수 있다. 믹스인은 구현된 메서드가 포함된 인터페이스로 볼 수도 있다. 이 패턴은 종속성 역전 원칙을 적용하는 예가 되기도 한다.
주의
명확한게 모호한 것보다 낫다
viewset을 사용하면 코드의 길이는 줄지만 때로는 모호해진다.
항상 완벽한 것은 아님
ex 사용자의 권한에 따라 다르게 하는지 이메일 인증은 했는지 등의 작업이 필요하다면 직접 만드는것이 더 낳을수도 있다.
대표적 : router을 사용하면 작성은 빠르지만 너무 많은 내용이 생략되어 있음
'개발 > 토막난 상식' 카테고리의 다른 글
리엑트 설계 구조 (0) | 2023.03.21 |
---|---|
JSON과 XML (0) | 2023.03.20 |
장고 _ model & admin 뿌셔 (0) | 2023.03.17 |
poetry 오류 (0) | 2023.03.16 |
git repositories 정리 방법 (0) | 2023.03.16 |