Httpie
$ pip install httpie
$ http -v POST 127.0.0.1:8000/owners name='홍길동' email='abc123@naver.com' age=25
$ http -v GET 127.0.0.1:8000/owners
ipython
$ pip install ipython
Django-extensions
$ pip install django-extensions
$ python manage.py shell_plus
로 실행)ForeignKey("class(1)", on_delete=models.CASCADE)
class name(models.Model):
objects = models.ForeignKey('self', on_delete=models.CASCADE)
# class ForeignKey(to, on_delete, **options)
# 위에서 class(1)에 알맞은 class 이름이 들어가야함)
ManyToManyField("class(1)", through="class(2)", related_name="")
class Actor(models.Model):
movies = models.ManyToManyField("Movie", through="ActorMovie", related_name="actors")
# class(1)에는 할당되는 class 명, thorugh="class(2)"에는 중간테이블(FK를 지닌)의 Class 명을 할당
# related_name을 사용하면 역참조 대신 attribute를 할당할 수 있다.
# 가독성 및 정확한 코드 판별을 위해서 's'를 붙여 'movies'와 같이 할당해줘야한다. (이것이 국룰!!)
through
:: 테이블의 확장성을 고려related_name
:: ManyToManyField
, ForeignKey
둘다 적용 가능, 역참조/정참조 가능ManyToMany Relationship
관련 정말 좋은 벨로그(velog)!!!!!!!!!!!!!!!related_name
관련 정말 좋은 벨로그(velog)!!!!!!!!!!!!!!!from...import...
import json
# python built-in module
# client로부터 받은 Json Data를 python Dictionary 형태로 변환
from django.views import View
# 외부 module
# client 요청을 처리하게되는 view를 작성하려면 Django에서 기본으로 제공해주는 View component 사용
from django.http import JsonResponse
# 외부 module
# 다시 응답을 보내줄때 사용할 모듈
from owners.models import Owner, Dog
# 사용자 정의 module
List Comprehension
, 2nd List Comprehension
(중요!!!!!!!!!!!!!!!)
******<<< 2중 For문 사용 >>>******
def get(self, request):
owners = Owner.objects.all()
results = []
for owner in owners:
dogs_lists = []
for dog in owner.dog_set.all():
dog_list.append({
"id" : dog.id,
"name" : dog.name,
"age" : dog.age
})
results.append(
{
'name' : owner.name,
'age' : owner.age,
'email': owner.email,
'dogs' : dogs_list,
}
)
******<<< List Comprehension >>>*****
"List Comprehension"을 사용하여 for문 대신 사용하여 list를 하나 줄임
def get(self, request):
results = []
owners = Owner.objects.all()
for owner in owners:
results.append(
{
'name' : owner.name,
'age' : owner.age,
'email': owner.email,
'dogs' : [{
'name': dog.name,
'age' : dog.age,
} for dog in owner.dog_set.all()]
}
)
******<<< 2nd List Comprehension >>>******
def get(self, request):
results = [
{
'name' : owner.name,
'age' : owner.age,
'email': owner.email,
'dogs' : [{
'name': dog.name,
'age' : dog.age,
} for dog in owner.dog_set.all()]
} for owner in Owner.objects.all()
]
최상위(project) urls.py
파일에 app
경로 추가
setting.py
파일이 있는 폴더 안에 urls.py를 찾으면 편하다.from django.urls import path, include
urlpatterns = [
# owners
path('', include('owners.urls'))
]
App 안에 urls.py 생성
$ touch urls.py
명령어로 생성App의 urls.py 파일에 view class 경로 추가
from django.urls import path
from owners.views import OwnersView, DogsView
urlpatterns = [
path('owners', OwnersView.as_view()),
path('dogs', DogsView.as_view())
]