Django C.R.U.D. 1

강민성·2021년 12월 10일
0

Django C.R.U.D.

목록 보기
1/2

Django Workflow


Client <> Urls <> Views <> Models <> Database
클라이언트(프론트엔드)가 요청(request)을 보냄
--> (urls.py에서) 장고가 urlconf를 통해 클라이언트의 HTTP요청(url 엔드포인트)이 어떤 데이터를 원하는 요청인지 분석
--> (views.py에서) 로직을 분석한 후 해당 로직으로 요청을 보내서, 요청한 엔드포인트에 맞는 로직 실행(뷰 호출)
--> (models.py에서) 모델의 클래스(데이터베이스와 통신할 클래스)를 기반으로 데이터베이스에서 원하는 데이터를 불러와서 요청을 처리하고, 요청에 맞는 HTTP 응답을 클라이언트에게 보냄

http로 통신
프론트엔드가 보내는 request메소드+주소(프로토콜+호스트+포트값+타겟)를 받아 처리
--> json 형태의 객체로 response 응답

C.R.U.D. 1


models.py에 클래스들 추가 --> ORM을 통해 데이터베이스에 데이터 추가
models.py: 뷰와 데이터베이스간의 관계를 정리한 것

C.R.U.D. 2


작성한 models.py의 클래스들을 기반으로 views.py 작성 --> urls.py 작성하여 view를 맵핑 --> 클라이언트로 장고 서버에 request 보내기(POST로 create/GET으로 read)

ORM

ORM(Object-relational mapping; ORM, 객체 관계 매핑)
데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
객체 지향 언어에서 사용할 수 있는 "가상" 객체 데이터베이스를 구축하는 방법
객체 관계 매핑을 가능하게 하는 상용 또는 무료 소프트웨어 패키지들이 있고, 경우에 따라서는 독자적으로 개발하기도 함
Create(생성), Read(읽기), Update(수정), Delete(삭제)가 있음

왼쪽(models.py)에서 적어준 클래스를 ORM을 통해서 오른쪽 테이블로 만들어줄 수 있음


저장

makemigration models.py의 클래스를 데이터베이스가 이해할 수 있게 하는 설계도(migrations.py)를 만드는 명령어
migrate 만든 설계도를 데이터베이스에 적용하는 명령어

create(생성)

클래스명.objects.create(attribute내용설정)

  • models.py의 class에서 선언해준 모든 attribute들(name, age..)을 다 만들어줘야 함
    (예외: 기본설정을 null=True로 설정한 경우에는 값을 입력하지 않아도 오류가 나지 않음 - 되도록 이 설정은 쓰지 않는 것을 권장)
  • 변수 = 클래스명.objects.create('attribute내용설정') 변수에 객체 할당 가능

read(읽기)

  • get(조건) 조건을 만족하는 오직 한개의 데이터만을 가져옴
    (만약 조건을 만족하는 데이터가 0개이거나 2개 이상이면 에러 발생)
  • all() 조건 없이 전부를 가져옴
  • filter(조건) 조건을 만족하는 데이터들을 모두 가져옴
    가져오는 객체가 여러 개일 수 있기 때문에 Queryset이라는 리스트에 담긴 형태로 가져옴.
    (이 리스트에 for문을 쓸 수 있음)

update(수정)


수정대상인Quseryset.update(수정내용)
Quseryset을 대상으로 하는 명령어
몇개의 대상이 수정되었는지 숫자가 출력됨

delete(삭제)


수정대상인Quseryset이나객체.delete()
Quseryset이나 객체를 대상으로 하는 명령어

queryset method

model method의 실행 결과는 다양함

  • queryset을 반환하는 method
    결과 예시
<QuerySet [<모델명(모델의클래스명): 모델명 object (id값)>, <모델명(모델의클래스명): 모델명 object (id값)>, ...]>

all() filter()exclude() values() values_list()

  • queryset을 반환하지 않는 method
    결과 예시
<모델명(모델의클래스명): 모델명 object (id값)> #객체 반환
9
True #boolean값 반환

get() create() bulk_create() count() exists() update() delete() first() last() save() aggregate()
데이터.exists() 데이터가 존재하면 True, 존재하지 않으면 False 리턴

  • 기타 등등

참고: QuerySet API methods

profile
Back-end Junior Developer

0개의 댓글