Client
<> Urls <> Views <> Models
<> Database
클라이언트(프론트엔드)가 요청(request)을 보냄
--> (urls.py에서) 장고가 urlconf를 통해 클라이언트의 HTTP요청(url 엔드포인트)이 어떤 데이터를 원하는 요청인지 분석
--> (views.py에서) 로직을 분석한 후 해당 로직으로 요청을 보내서, 요청한 엔드포인트에 맞는 로직 실행(뷰 호출)
--> (models.py에서) 모델의 클래스(데이터베이스와 통신할 클래스)를 기반으로 데이터베이스에서 원하는 데이터를 불러와서 요청을 처리하고, 요청에 맞는 HTTP 응답을 클라이언트에게 보냄
http로 통신
프론트엔드가 보내는 request메소드+주소(프로토콜+호스트+포트값+타겟)
를 받아 처리
--> json 형태의 객체로 response 응답
models.py에 클래스들 추가 --> ORM을 통해 데이터베이스에 데이터 추가
models.py
: 뷰와 데이터베이스간의 관계를 정리한 것
작성한 models.py의 클래스들을 기반으로 views.py 작성 --> urls.py 작성하여 view를 맵핑 --> 클라이언트로 장고 서버에 request 보내기(POST로 create/GET으로 read)
ORM(Object-relational mapping; ORM, 객체 관계 매핑)
데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
객체 지향 언어에서 사용할 수 있는 "가상" 객체 데이터베이스를 구축하는 방법
객체 관계 매핑을 가능하게 하는 상용 또는 무료 소프트웨어 패키지들이 있고, 경우에 따라서는 독자적으로 개발하기도 함
Create(생성), Read(읽기), Update(수정), Delete(삭제)가 있음
왼쪽(models.py)에서 적어준 클래스를 ORM을 통해서 오른쪽 테이블로 만들어줄 수 있음
저장
makemigration
models.py
의 클래스를 데이터베이스가 이해할 수 있게 하는 설계도(migrations.py
)를 만드는 명령어
migrate
만든 설계도를 데이터베이스에 적용하는 명령어
클래스명.objects.create(attribute내용설정)
변수 = 클래스명.objects.create('attribute내용설정')
변수에 객체 할당 가능get(조건)
조건을 만족하는 오직 한개의 데이터만을 가져옴all()
조건 없이 전부를 가져옴filter(조건)
조건을 만족하는 데이터들을 모두 가져옴
수정대상인Quseryset.update(수정내용)
Quseryset을 대상으로 하는 명령어
몇개의 대상이 수정되었는지 숫자가 출력됨
수정대상인Quseryset이나객체.delete()
Quseryset이나 객체를 대상으로 하는 명령어
model method의 실행 결과는 다양함
<QuerySet [<모델명(모델의클래스명): 모델명 object (id값)>, <모델명(모델의클래스명): 모델명 object (id값)>, ...]>
all()
filter()
와exclude()
values()
values_list()
<모델명(모델의클래스명): 모델명 object (id값)> #객체 반환
9
True #boolean값 반환
get()
create()
bulk_create()
count()
exists()
update()
delete()
first()
last()
save()
aggregate()
데이터.exists()
데이터가 존재하면 True, 존재하지 않으면 False 리턴