Model & Admin
Django Project 내에는
Model + View + Template 의 MTV 구조로 동작되는데
지난 Word Counter 에서는 View 와 Template 간에 데이터를 주고받고 가공해서 넘겨주는 구조에 대해서 공부하였다.
이번에는 Model을 통해 데이터를 넘겨주고 View에서 가공하고 Template에서 출력하는 것에 대해 공부를 하려고 한다.
1) Model에 데이터를 어떻게 담을 것인가
2) Model의 데이터를 어떻게 View로 넘길 것인가
3) 이러한 데이터를 어떻게 Template 화면에 띄울 것인가
사전 준비.
가상환경 켜기 - project 만들기 - app 만들기 - project에 app 연결하기
1. DB를 다루는 Model
Model을 만들기 위해서 우리는 models.py에 클래스 형태로 Model의 틀을 작성한다.
즉, 여기서 Model을 만드는 과정을 논하자면 다음과 같이 비유된다.
Models.py = 공장, Class = 만들 제품의 기계틀, 생성된 객체 = 제품
1 2 3 4 5 6 | project/app/models.py class Blog(models.Model): title = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') body = models.TextField() | cs |
cf) DB는 장고와 별개 - 여러 개가 있을 수 있다
기본적으로 Sqlite 제공하지만 이외에도 다양한 DB를 사용 가능
그리고 모델을 만든 후에 해당 모델을 만들었다고 django에게 알려준다
migrations 만들기
$ python manage.py makemigrations
그리고 실제 migrate를 동작 시킨다
DB migrate 하기
$ python manage.py migrate
그리고 이러한 모델을 만들기 위한 관리자 계정이 필요하므로 다음의 명령어를 통해 관리자 계정을 만든다
관리자(admin) 계정 만들기
$ python manage.py createsuperuser
이렇게 관리자 계정을 만들고 난 후,
로컬주소/admin 의 링크를 통해 들어가면 다음과 같은 화면이 뜬다.
로그인 후 들어가게 되면
Blog 모델을 만드는 창이 따로 없는데 이 때, admin.py에 가서도 Blog 모델을 만드는 창을 따로 설정해주어야한다.
1 2 3 4 5 | project/app/admin.py from .models import Blog admin.site.register(Blog) # 어드민 사이트에 블로그 모델 등록 | cs |
그러면 만드는 창이 생기게 된다.
추가적으로, 글을 만들고 나면 하나 하나의 객체를 일컫는 String이 Blog.object와 같이 나오게 되는데 이렇게
object로 부르는 것이 보기 싫다면 다음의 메소드를 통해 객체를 title로 부를 수 있게 된다.
1 2 3 4 5 6 7 8 9 | project/app/models.py class Blog(models.Model): title = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') body = models.TextField() def __str__(self): return self.title | cs |
여기서 나는 다음과 같은 들여쓰기 오류가 떴는데, 이것은 인터프리터가 띄워쓰기와 탭 키를 번갈아 가면서쓰면 인식을 못해서 발생한 오류로 둘 중 하나로 통일해주면 해결이 된다.
2. DB를 View에서 가져오기
view 에서 가져오는 방법은 어렵지 않다.
먼저 view 파일에 함수를 정의하기에 앞서
app/templates/home.html 파일을 만들고
url에 home을 등록해준다
그리고 Views.py에 가서 다음의 코드를 통해 Model을 가져올 수 있다
1 2 3 4 5 6 7 8 9 | project/app/views.py from .models import Blog # Create your views here. def home(request): blogs = Blog.objects # 객체 가져오기(쿼리셋) # 메소드를 통해 이 쿼리셋을 활용하는 것 return render(request, 'home.html', {'blogs':blogs}) | cs |
여기서 객체를 가져온 것을 쿼리셋이라고 하고
메소드를 통해 가공해서 넘겨줄 수 있는 것이다
3. Template에 출력하기
메소드는 다양한 형태로 활용해 줄 수 있는데 이는 다음에 자세히 알아보도록 하고
우리는 template 파일에 가서 다음의 코드를 통해 모델의 내용을 출력하도록 한다
1 2 3 4 5 6 7 8 | project/app/template/home.html {% for blog in blogs.all %} <h1> {{blog.title}} </h1> <p> {{blog.pub_date}} </p> <p> {{blog.body}} </p> <br><br> {% endfor %} | cs |
그렇게 되면 다음과 같이 완성이 된다.
'Web Programming > Django' 카테고리의 다른 글
Blog 완성하기 (글 작성하기) (0) | 2019.02.02 |
---|---|
Home & Detail (Blog 모델 상세 페이지) (0) | 2019.01.31 |
Word Counter 만들기 (0) | 2019.01.17 |
MTV 패턴 (0) | 2019.01.08 |
Hello World 이론 & 실습 (0) | 2019.01.08 |