해당 내용은 제가 파이썬-장고를 이용한 프로젝트를 가지고 면접 준비를 할 때 정리했던 내용들 입니다.
: 객체에 초기값을 설정할 때 사용
: 초깃값은 setdata와 같은 메서드를 호출하여 설정하기 보다는 생성자를 구현하는 것이 안전
→ 파이썬 메서드명으로 init 을 사용하면 이 메서드는 생성자가 됨
: 생성자(Constructor) = 객체가 생성될 때 '자동으로 호출'되는 메서드를 의미.
: 라이브러리는 request처럼 우리가 import로 호출하는 것들
: 프레임워크는 우리가 쓴 코드를 호출
: python 코드에 있는 모델 구조와 데이터베이스의 구조를 서로 동기화 하기 위해서
: 데이터베이스에 추가 안할 것.
: class Meta: abtract=True
: django에서 model을 환경설정 할 때 사용
: ForeingKey와 같지만 고유한 값이 됨
: 자신을 참조하고 있는 테이블을 참조하기 위해 사용
: 객체관계매핑
: python manage.py shell
: 파이썬을 db와 직접 소통하게 하는 방법
: 쿼리셋(QuerySet)은 전달받은 모델의 객체 목록입니다. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬을 할 수 있습니다.
: 쿼리셋의 중요한 기능은 데이터를 필터링하는 거예요. 예를 들어, 우리는 ola라는 사용자가 작성한 모든 글을 찾고 싶다고 해볼게요. 이런 경우 Post.objects.all()
에서 all
대신, filter
를 사용합니다. 쿼리셋 안에 있는 괄호 안에 원하는 조건을 넣어줄 거예요. 지금 이 경우에는 작성자(author)
가 나(me)
인 조건을 넣어야겠죠. 이걸 장고로 표현한다면 author=me
가 됩니다.
: _set 의 형태로 사용
ex) room.user_set.all()
: related_name으로 대체 가능
1) config의 url.py에 모든 url 추가
2) 분할정복 → 어플리케이션 마다 url.py를 생성
: 유저가 특정 url에 접근했을 때 작동하게 되는 함수
: 사람들에게 코드를 보내는 하나의 형식
: /rooms → JSON → UI
(url을 요청하는 사람에게 json 전달 → react가 json을 가져다 예쁘게 만들어줌)
Rest API는 Rest를 기반으로 만들어진 API를 의미한다.
Rest는 Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 말한다.
데이터가 요청될 때 JSON이나 XML을 통해 상태(정보)를 주고 받는다.
DRF는 Django 안에서 이러한 Rest API를 쉽게 만들 수 있도록 도와주는 라이브러리다.
웹 브라우저 API는 범용성이 커서 개발을 쉽게 만들어주고, 시리얼라이즈 기능도 제공해주기 때문에 DRF를 사용한다.
is_valid()
를 호출해서 검증해야 한다.: serializer는 데이터의 형태를 알고있기 때문에, user 데이터가 category가 되기 위한 조건을 만족시키는 유효한 데이터인지 검증을 도와줌
: 모델을 JSON으로 쉽게 바꿔주는 것이다. 이미 선언해둔 모델을 가지고 직렬화를 함.
: ModelSerializer
를 쓰면 내가 원하는 모델의 필드들만 json으로 만들어줄 수 있다고 한다. Meta
클래스에 직렬화를 할 모델을 쓰고, json으로 만들어줄 필드들을 쓰면 된다.
: 나름대로 정리를 해보자면 DRF로 rest API 개발을 할때 데이터를 json 형식으로 주고 받는데, 장고에서 쓰는 모델객체를 쉽게 전달하기 위해 json으로 변환시켜주는게 serializer의 역할이다. 그래서 drf 템플릿을 보면 모델 인스턴스들이 다 json 형식으로 보였던건가 보다. form이랑 비슷하다는건 "데이터를 전달한다"는 점에서 비슷하다고 말한건가보다.
1) django 모델을 json으로 변환
2) user로부터 data를 받아 장고 모델을 만들 때 필요
: 당장 아무일도 일어나지 않음. create 만들어줘야 함.
: put에서 부분적으로 업데이트 가능하다는 의미로 사용.
(put 할 때, 원래 category와, request.data, partial=true 가져옴)
: 모든 데이터가 다 넘어오기 때문. (늘 정보의 크기에 유의해야함)
: 모든 코드가 성공하거나, 하나라도 실패하면 아무것도 성공하지 않기를 바랄 때 사용
: with transaction.atomic():
: _set의 형태 (related_name 활용)
: user_set_password(password)
user.save()
: old_password와 new_password 값 받아서
: old_password 의 해시값이 원래 password 해시값과 같은지 확인.
if user.check_password(old_password):
user.set_password(new_password)
user.save()
: POST
: username과 password를 돌려주는 function
: username과 password가 맞으면 user 리턴
: django는 인증 시스템이 기본으로 붙어있음.
: 인증 시스템이(세션 베이스)이 세션 생성, 쿠키 생성
: django 방문 → 쿠키가 django로 → django가 쿠키 읽어서 request.user에 user와 쿠키정보 넣어둠
: IsAuthenticatedOrReadOnly - 인증되지 않았다면 읽기만 가능