Django
는 장고
라고 읽으며 파이썬을 기반으로 한 Web Framework
입니다. 오늘은 Django
를 배운다면 이해하고 있어야하는 점들과 Django
의 역할을 살펴 볼 것입니다.
위의 이미지는 Django
의 Workflow
입니다. Client
에서 요청이 오면 가장 먼저 URLconf
라는 곳을 지나가게 됩니다.
URLconf
는 은행에서 원하는 창구 표를 뽑아주시는 분과 같은 역할을 합니다.
그 다음에 도착하는 곳은 View
입니다. View
는 MVC
모델에서 Controller
과 유사한 역할을 가지고 있습니다. View
는 필요한 데이터를 Model
에서 가져와 가공하는 역할을 합니다.
Model
은 데이터베이스 Schema
를 담당하고, 여러개의 클래스로 이루어져있습니다.
Model
과 Database
사이에는 ORM
이라는 것이 존재합니다. ORM
은 Object-Relational-Mapping으로 Django
에서의 ORM
은 파이썬으로도 SQL
문 처럼 데이터를 조작할 수 있게 해줍니다.
Django
를 공부하게 되면 QuerySet API
라는 것을 사용하게 됩니다. QuerySet
을 공부하면서 기억하면 좋은 것들을 알아보겠습니다.
QuerySet
QuerySet
은 api
이름이면서 특별한 Data Type
이기도 합니다. 예로 Person
이라는 객체에서 정보를 가져오고 싶을때 get()
메소드로 가져올수도, filter()
메소드로도 가져올수 있습니다. 이 둘의 큰 차이점 중 하나는 get()
은 객체를 반환하고, filter()
은 QuerySet
을 반환합니다.
objects
QuerySet
메소드를 사용할때 아래와 같은 규칙을 띕니다.
>> Person.objects.create(name="Justin", age="25", job="CEO")
Person
DB에 데이터를 추가하는 코드로, Person
다음에 objects
가 사용되었습니다. 이 objects
는 Manager class의 메소드로 기억하면 되겠습니다.
_set
참조하고 있는 경우는 person.name
이나 person.age
와 같이 정보를 가져올 수 있습니다. 하지만 만약 참조되어지고 있는 경우에는 _set
을 사용하면 됩니다.
>> person.dog_set.all() #주인이 키우는 모든 강아지를 QuerySet으로 반환
update
C.R.U.D
중에서 update
은 단일 객체에는 사용이 불가능합니다. 즉, QuerySet
에만 사용이 가능합니다.
__name
>> Product.objects.filter(category__name="콜드 브루 커피")
# <QuerySet [<Product: Product object (1)>]>
위와 같이 'Child'는 (__) 을 사용해서 자신의 Parent
필드를 참조할 수 있습니다.