해당 내용은 제가 파이썬-장고를 이용한 프로젝트를 가지고 면접 준비를 할 때 정리했던 내용들 입니다.

: 객체에 초기값을 설정할 때 사용
: 초깃값은 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 - 인증되지 않았다면 읽기만 가능