Django_CRUD

강현구·2021년 12월 18일
0

Django

목록 보기
3/12

CRUD

C : Create 
R : Read
U : Update
D : Delete

  • URLconf에서 어떤 정보에 대한 요청인지를 분석하고, 그 분석내용에 따라 요청을 View로 넘긴다.
  • View에서는 처리하기 위한 정보를 Model로부터 받고 Model에서는 View로 정보를 전달하기위해 DB로부터 데이터를 알맞게 가공하는 과정을 거친다.
  • 웹서버로는 주로 nginx, apache 서버를 많이 이용한다.

ORM이란?

Object-Relational-Mapping (오브젝트 맵퍼)
Python에만 있는것이 아니라 JavaScript에도 있다.
언어의 객체와 DB의 테이블이 매칭되는 기능이다.
> 한개의 클래스가 한개의 DB 테이블이 된다.
> 클래스 내에서 할당되는 각각의 변수가 컬럼이 된다.
> 장고는 id를 생략하고 table을 만들면 자동으로 생성해준다.

ORM -> DB table (Migration)
makemigrations : 데이터베이스의 설계도를 만드는 명령어 뒤에 앱 이름을 붙여 해당앱의 migration을 할 수도 있다.
migrate : 만든 migration의 적용!, 실제로 table을 만드는 단계.

> DB를 별도로 수정하게 되면 migration파일과 내용이 달라져 DB가 꼬이게된다.
(반드시 협의, 필요 하에 진행해야한다.)

ORM CRUD

Create

create 메서드는 속성값을 전부 선언해줘야한다.
(기본적으로 빈칸을 두지 않고 전부 채워야한다. 단, 컬럼의 속성값으로 null=true나 dafault값을 지정해주면 비워두어도 메서드 사용이 가능하다.)

다른 방법으로 모델의 instance를 생성하고 save함수를 통해 만들 수도 있다.

Read

값을 읽어오는 메서드는 기본적으로 크게 get, all, filter가 있다.

  • get : 무조건 한개의 값(인스턴스)을 가져온다. get( 조건 ) 으로 조건을 만족하는 인스턴스에 대한 값을 가져온다.
    만약 객체가 없으면 DoesNotExist에러가 발생하고, 여러개의 객체가 조회되면 MultipleObjectsReturned 에러가 발생한다.
  • all : 조건없이 table의 모든 인스턴스를 가져온다. 반환하는 데이터는 인스턴스를 담은 리스트의 형태인 QuerySet으로 반환된다.
  • filter : 조건에 해당하는 모든 인스턴스를 가져온다.(조건을 만족하지 않으면 가져오지 않을 수도 있다.) all과 마찬가지로 QuerySet으로 반환하며, 가져올 값이 없으면 빈 QuerySet이 된다.

QuerySet은 리스트와 비슷한 성질을 갖고 있기 때문에 for문으로 순회할 수 있다.

Update

update는 QuerySet을 대상으로 하는 명령어로, QuerySet을 Reading하여 나오는 인스턴스 뒤에 update 메서드를 사용하면 읽어온 전체 쿼리셋에 업데이트 된다.

Delete

객체 하나도 가능하고, 쿼리셋에도 사용할 수 있다.
대상값 뒤에 delete()를 붙여준다.

Method Model

메서드를 사용할 때, 주의할 점은 메서드가 어떤 반환값을 주는지에 대한 것을 알고 있어야 한다는 점이다. 메서드별로 반환값의 데이터 타입이 다르기 때문에 경우에 따라 쓸 수 없는 메서드도 있다.

예를 들어 get을 썼을 때, 0개 또는 2개 이상의 값을 가져오도록 설정하면 에러가 발생한다.
(500 서버 에러가 발생할 수 있다)
이러한 부분은 예외처리를 통해 외부적으로 나가지 않도록 설계해야 한다.

사진을 눌렀을 때, 표시
사진에 id값을 주고 그 id값으로 DB의 데이터를 가져오게 한다.

profile
한걸음씩

0개의 댓글