Today I Learnt How Django Works

Jiwon Jung·2021년 1월 1일
0

T.I.L

목록 보기
8/10
post-thumbnail

Understanding Django Flow

Starting a django project

mini conda를 활용하여 가상 환경을 만든 후 가상환경에 django 및 필요한 시스템을 다운받아 시작한다.
pip을 이용하여 다운받을 수가 있다.

-conda activate "가상환경 명"
-pip install django
-pip install mysql client

-pip freeze 라는 명령어를 통해 어떤 프로그램이 가상환경에 준비되어 있는지 확인이 가능하다.

그 다음 프로젝트를 시작할 디렉토리로 가서

django-admin startproject "프로젝트명"

입력을 하여 프로젝트를 생성한다.

love라는 이름의 프로젝트를 만들어 보겠다.

이처럼 love라는 프로젝트 안에 love라는 기본 설정 폴더와 manage.py가 생성이 되었다.

urls.py

먼저 여기서 urls.py를 보자.

가장 먼저 요청이 도달하는 곳이 바로 urls파일이다. 이 파일을 통해 어떤 처리 과정으로 보낼지 정하는 문지기 역할이라 볼수가 있다.

만약 http 요청 127.0.0.1/8000/'요청path'를 이용해 장고에 요청을 보내면
'요청 path'라고 지정해놓은 urlpatterns에 맞는 데이터 흐름으로 연결이 된다. 윗 패턴 같은 경우

127.0.0.1/8000/users/signup

윗 요청을 SignUpView라고 하는 실질적 로직이 들어있는 view를 실행시켜 줄 것이다.

다시 정리를 하면 들어온 요청을 문지기가 어디로 갈지 연결시켜 주는 역할을 ursl.py가 수행한다.

models.py

그 다음 그럼 작업을 수행하는 데이터를 처리하는 과정인 CRUD 과정을 살펴보자.

앞 포스팅에서 models의 역할과 CRUD, ORM의 뜻도 설명하였다. 실재로 models.py에 올린 데이터 추출 명령에 따라 데이터 처리를 한다.

create


models.py에 다음과 같은 클래스를 만듬으로 나의 데이터베이스에 정보를 등록할수가 있다. Person이라는 클래스를 mysql에 테이블이 만들어 지며 각 column에 입력되는 정보는 name, age, job이라는 속성에 입력되는 정보이다.

어떻게 이런게 가능하냐?
장고가 이미 이런 작업으로 데이터를 등록할 수 있게 framework를 만들어 줬기 때문에 models.Model속성으로 간편하게 등록가능하다.

등록시 manage.py 파일이 존재하는 디렉토리로 이동하여
-python manage.py shell 를 실행시키면 실시간으로 django와 database와 소통가능한 python을 실행시켜준다.
여기에

Person.objects.create(name="이름",age="나이",job="직업")

을 실행 시키면 Person 클래스의 objects.create 속성에 있는 파라미터에 keyword argument를 이용해 인자를 전달해주는 방식이다.

여기서 objects는 Person model class를 통해 수행할 crud 작업을 제공하는 Manager class이다. create와 같은 다양한 crud매서드가 사용 가능하다.

read

read는 현재 데이터베이스에 있는 정보를 가져오는 명령문이다.

create로 생성된 데이터를 읽는 작업이다.

Person.objects.get(name="이름")
Person.objects.filter(age="특정나이")

read의 작업 중 가장 많이 사용하는 작업은 get과 filter이다.
직관적으로 get은 class로 아웃풋된 하나의 인스턴스를 가져온다.
filter는 해당되는 조건에 맞는 인스턴스를 리스트형식으로 가져온다. filter는 리스형식이기 때문에 인덱스를 이용하여 특정 값을 가져올수가 있다.

person=Person.objects.filter(age="특정나이")
person[0].name

를 수행하면 특정나이로 필터 되어 첫번째 인덱스인 인스턴스의 이름을 불러온다.

update

입력>>>person.objects.filter(age="특정나이").update(job="바꿀 직업")
출력>>>2

필터를 이용해 특정 값을 변경할 수가 있다. update를 이용하여 출력되는 숫자는 몇개의 인스턴스 업데이트 작업을 수행하였는지 알려준다.

delete

입력>>>person.objects.filter(age="특정나이").delete()
출력>>>(2,{'products.Product':2})

delete를 사용하면 출력으로 몇개를 어디서 지웠는지 출력이된다.

QuerySet

이처럼 어떠한 작업을 수행하여 정보를 요청하여 얻는 과정을 Query라고 한다.
장고의 이 QuerySet Api를 탄탄히 하면 80%는 완성한거라고 말한다!! 다양한 QuerySet을 익혀보자

profile
Venire, Videre, Vincere

0개의 댓글