[Django] C.R.U.D

초이지수·2022년 4월 8일
0
post-thumbnail

쿠와아아아ㅏ악 커피의 힘으로 얻게 된 장고! 출바알~ 🤩

졸리면? 커피를.. 마시면 돼요! 계속 코딩해!


👻 Web application Server = Django 라고 생각하면 됩니다!


👻 장고가 복잡하게 연결되어 있는 이유!

예전에는 모든 로직이 한 곳에 뭉쳐, 다양한 코드들이 하나의 file에 들어가 있었다.
-> 당연히? 다수의 사람들이 한 번에 작업하게 되면 문제가 발생할 수 밖에 없었다.

프로젝트가 점점 커지다보니 관리하기가 어려워졌고, 디자인 패턴중 MVC 모델을 사용해 코드를 분리하기 시작! 했다.

결국 ,, 특정 영역을 분리해 서로 연결되게 만들다보니 복잡하게 되었당 하하! 멀리보면 더 좋은 일! ...미래의 나 축하햇🥲


👻 MVC, MFV

두 개가 동일한 뜻이라고 생각하면 됨!

M , V , C 총 세가지로 나눠 유기적으로 돌아간다!

  • Model
    안전하게 데이터를 저장
  • View
    데이터를 적절하게 유저에게 보여줌
  • Control, Template (Django)
    사용자의 입력과 이벤트에 반응하여 Model과 View를 업데이트
    장고는 Control 대신 Template가 들어간다고 생각하면 됨!

👻 통신부터 데이터 처리까지 하는 장고!

  • Client <> Urls <> Views <> Models <> Database

🤖 API

Front가 화면을 그리기 위해서는 데이터가 필요하다. Front와 Back 중간에서 Database에 있는 Data(Front가 필요한)를 갖다 쓸 수 있게 중간다리를 해주는 역할!

🤖 Frontend

HTTP 통신을 통해 Client(Httpie, Chrome, Postman 등)를 사용해서 Server에 요청을 보냄!

🤖 Backend ( 바로 내가 해야할 일! 얏호!)

  1. Django Application 을 통해 Client의 요청을 분석 (URLconf)
  2. 요청을 처리하기 위한 로직(View) 을 실행
  3. 데이터베이스와 통신(Model)하여 데이터 작업을 수행
  4. 요청에 맞는 응답을 보낼 수 있는 Backend API를 구현

🙋‍♀️ models.py (table)

Database 작업 관련 모듈 만들기

QuerySet API 가 제공하는 model method (all, filter, exclude, values, get, create, values_list 등) 활용하여 Database에 Data를 생성, 조회, 수정, 삭제 작업을 함!

(모든 명령은 변수에 담아서 사용할 수 있다! python 공부 열심히 하자!)


🙋‍♀️ makemigrations 과 migrate

⭐️ models.py 에 작성한 Class를 갖고 table을 만들어 볼까요?
(table이 있어야 Database를 넣을 수 있다.)

  1. makemigrations = 데이터베이스에 적용할 테이블을 만들기 위한 설계도 만들기!

  2. migrate = 설계도를 테이블에 적용시키는 과정
    Python에 있는 것을 Database로 옮긴다!

  • DB 관련해서 수정사항이 있을 경우, models.py로 수정하고 다시 migrate 해줘야 한다 🤤

  • 앱을 생성하면 migration 디렉토리가 있다! 그 안에 migration이 생기는 것!


🙋‍♀️ views.py

🔥 ORM (Object-relational mapping)

데이터베이스와 스크립트언어(파이썬, 자바스크립)과의 관계를 매핑 해주는 역할!

Django에 Python class(Object=객체)랑 Database table 하나를 일대일로 mapping 해줌!

  • 객체지향 프로그래밍은 Class를 사용하고 관계형 데이터베이스는 Table을 사용.
    객체 모델과 관계형 모델간에 불일치가 존재하므로 MySQL을 통해 불일치를 해결하고자 함!

  • ORM은 기술의 이름. 장고에서만 쓰이는 용어가 아님!
    Queryset API는 Django ORM에서 사용하는 기능 중 하나!
    (ORM을 쓰려고 지금 내가 장고를 배우는 것이다!!!!!!!!!!!!!)


  • 간단하게 object를 쓰는 건 orm한다고 생각하면 됨!

  • Model에는 id가 없고 Database에는 id가 있다.
    장고가 알아서 순차적으로 만들어주기 때문에 model id를 특별하게 지정해주고 싶을 때만 지정해준다.


🙉 1. ORM - Create

CharField는 공식문서 찾아보기~

  • 테이블의 기본 성질(속성)은 모두 채워야 함!
    비워도 되는 옵션을 주는 것은 nur = true

🙉 2. ORM - Read

크게 사용할 수 있는 method가 세개 있다!

  1. get - 자원(resource)를 읽어 올 때
    괄호 안에는 조건을 넣어주면 됨!
    field를 넣을 수 있다.
    무조건 1개만 가져올 수 있는 method
    person으로 객체를 바로 가져옴

  2. filter
    괄호 안에 조건을 안 넣으면 all 과 같아짐
    괄호에 조건 여러개 넣을 수 있다
    and로 봐야함! or 은 다른 방법이 이씀.....

  3. all
    table에서 전부 다 가져온다!

  • get은 객체를 바로 가져온다.
  • filter, all은 QuerySet (객체들이 담긴 리스트 같은 느낌. 요소 하나하나가 컴마로 구분이 되고 인덱싱이 가능함! [0]이런거 for문으로 돌릴 수 있음!) 을 가져옴!
    for문이 돌때마다 객체를 하나씩 꺼내서 가공하는 일을 제일 많이 하게 될 것이다 미래의 지수야^^

🙉 3. Update 수정

크게 두 가지!

  1. update
    QuerySet에서만 사용 가능
    대상을 쓰고 .update 작성 해줘야 함!

  2. save method
    객체를 불러와서 직접적으로 영향


🙉 4. Delete

  • row를 하나가 아니라, 다!!!!!!!!! 지워버림!
    특정 테이블 값만 바꾸고 싶으면 업데이트를 하는 것 이다!

  • exists() count() 많이 씀
    method를 썼을 때 커리셋인지 숫자인지? 어떠한 결과가 나오는 지를 알아야한다!

  • value는 Queryset 딕셔너리가 나옴


🙋‍♀️ Table을 만들고! Django Shell을 통해 QuerySet API를 이용하여 Data를 추가해보자!

🤸‍♂️ Python (shell)

장고로 가상환경을 실행 한뒤 manage.py 가 들어있는 디렉토리에서 아래 명령어를 입력하면 shell에서 장고기능을 사용 가능!

가상환경 키고 
python manage.py shell

🤸‍♂️ QuerySet 이란?

전달받은 객체의 목록!
QuerySet은 Database로부터 Data를 읽고 filter를 걸거나 정렬 할 수있다.
list와 구조는 같지만 Python 기본 자료구조가 아니기에 읽고 쓰기 위해서는 자료형 변환을 해줘야한다. QuerySet은 Database의 여러 레코드(row)를 나타냅니다.


🤸‍♂️ MySQL로 확인! (ORM으로 입력 했던 것들)

MySql접속
$ mysql -u root -p

Database 확인 & 선택
$ show databases;    
$ use '사용할 database이름'

Table 확인 및 Table 정보 확인
$ show tables;
$ desc '해당 table 이름'

migrations 생성됐던 목록 보는 명령어
$ mysql> select * from migrations;

  • class는 첫글자 대문자로 단수로, Table명은 소문자 복수로 써주면 됨

  • ORM 하려면 object해주는데 manager class임!

  • shell에서 변수 지정해줄 수 있음! 변수는 shell에서만 쓰자

  • desc로 table 정보 확인


🙆‍♀️ urls.py가 요청을 나눔하는 방법!


📖 Backend로서 내가 해야 할 일

  1. 일단 모듈(models.py)을 짜고
  2. HTTP Method 요청에 의한 로직 처리를 위한 views.py를 만들고
  3. HTTP Client 요청 분석을 위한 urls.py를 만든다!
    (적절한 view 를 맵핑해주는 urls.py 를 작성)

  • Django는 언어가 아닌, 오픈소스 웹 애플리케이션 프레임워크였다.
    언어(Python)는 도구, 웹 시스템을 만들기 위한 도구! 계속 공부해!

  • 단순히 아이디, 비밀번호 입력만 하면 로그인이 되었던 사용자 입장에서 개발자 입장으로서 구현을 해보니,,
    모든 시스템에는 사용자의 편의를 위해 노력하는 개발자들의 수고로움이.. 스며들어있구나... 체감하게 되었다. 앞으로 나도! 사용자들이 개발자들이 노력한다는 사실조차 인식하지 못하게! 편한! 시스템을 만들 것이다!!!!!!!!!!!!!!

  • 멀기만 했던 데이터베이스의 세계에 조금 다가간 것 같아 신나고 무섭고 두근거린다. 캬캬
    더 공부해서 더 더 더 가까워져야징 우리 친하게 지내쟈~~

profile
닫혀 있어서 벽인 줄 알고 있지만, 사실은 문이다.

0개의 댓글