티스토리 뷰
지난 번에 이어서 설명하겠습니다.
우선 django는 MTV 패턴을 지니고 있습니다. 이것은 MVC 패턴과 비슷한 것인데 model, template, view 의 약어로
model을 이용해 내가 화면에 띄우고 싶은 model을 담은 객체를 만들고 (models.py -> class 생성),
template을 이용해 화면에 띄우고, (html 이용)
view를 이용해 html에 동작할 함수를 짭니다. (views.py)
우선 모든 CS와 관련된 처음은 hello world 부터 출발하니 저도 한 번 식상하지만 hello world를 띄워보겠습니다.
VS code를 켜고, 가상환경이 있는 디렉토리로 가서 가상환경을 켭니다.
우선은 hello world만 출력할 것이니 model은 만들지 않겠습니다. hello world정도는 template만 가지고도 만들 수 있으니까요.
siteapp 디렉토리도 이동하여 templates 폴더를 하나 만들고 그 안에 home.html이라는 html파일을 하나 만들어줍니다.
리눅스 명령어를 이용하여 mkdir templates -> touch home.html 하셔도 되고 아니면 마우스 우클릭하면 새 폴더, 새 파일 만들기가 있습니다.
그렇게 home.html에 helloworld라고 친 뒤
저 html파일을 url을 이용해 연결시켜줍니다.
project1의 urls.py로 이동하여 urlpatterns에 아래를 추가합니다.
path('',siteapp.views.home, name="home"),
이렇게 하면 siteapp의 views의 home을 "home"이라는 이름으로 http://127.0.0.1:8000 와 연결시켜 준다는 뜻입니다.
그러므로 기본으로 있던 path('admin/',admin.site.urls) 라는 것은 http://127.0.0.1:8000/admin을 입력하면 admin 페이지가 나오는 것 또한 알 수 있습니다. 그런데 한가지 문제가 있습니다. siteapp에 views를 만든다 쳐도 저걸 불러오질 않았습니다. 그러므로 바로 위에 from django.urls import path 아래 부분에 import siteapp.views 를 import 해옵니다.
그렇다면 이제 views.py를 건드려봅시다. views.py로 이동하여 다음과 같이 쳐봅시다.
def home(request):
return render(request,'home.html')
render 함수는 기본으로 제일 윗 줄에 import 되어 있습니다. 이렇게 입력하여 urls.py에서 기본화면으로 siteapp.views.home 을 불러와라고 했는데 그 home에 해당하는 녀석을 어떻게 불러올지 나타낼 수 있습니다.
request, 말 그대로 요청하는 것 입니다. views.home 이라는 것을 요청 받으면 render를 이용해 home.html을 띄워주는 것 입니다.
여기까지 한 뒤 다시 runserver를 이용해 실행시키면
아주 깔끔한 백지에 hello world 한 줄이 나옵니다.
이제 model을 이용해 뭔가를 띄워보도록 합시다.
siteapp의 models.py 에 위와 같이 입력해봅시다. (model 이름은 첫 글자를 대문자로 해야합니다!)
Post 라는 model에 title은 CharField, body는 TextField로 받습니다. field 란 데이터베이스의 테이블에서 열에 해당 되는 값입니다. title과 body란 것이 Post 내에서
title body
**** **** 과 같은 값을 가지게됩니다.
CharField는 문자열로 입력는 받는 field로써 max_length를 지정해주어야합니다.
저렇게 한 뒤 중요한 작업이 있는데 바로 migration 입니다. migration이라는 명령어를 이용해 django에게 Post 라는 model을 내가 만들겠다 혹은 변경하겠다를 알려줍니다.
코드는 다음과 같습니다.
python manage.py makemigartions
그 다음
python manage.py makemigrations
이렇게 하면 뭔가 쫘라락 적용되었다고 나옵니다. 그런 뒤 admin.py로 이동하여
맨 위에 from .models import Post를 적은 뒤 아래에 다음과 같이 적습니다.
admin.site.register(Post)
이렇게 하여 admin에서 Post라는 model을 관리할 수 있게 됩니다.
서버를 켠 뒤 admin페이지로 넘어가면
위와 같이 Posts 라고 하는 Post model을 관리할 수 있는 것이 나옵니다. Add를 누른 뒤 자유롭게 입력하면 됩니다.
save를 한 뒤 views.py로 돌아가겠습니다.
views.py에서 다음과 같이 입력합니다.
.models 를 이용해 같은 디렉토리 내의 Post라는 model (class)을 import 합니다.
그리고 Post.objects.all() 은 Post 라는 모델 내의 모든 객체를 가져온다는 뜻입니다. 위에서는 '첫 글입니다'에 해당하는 하나 밖에 없으므로 두번째 글도 추가 하여 보면 좀 더 확실히 알 수 있습니다.
그리고 dict를 이용해 post에 담긴 내용을 'post'라는 이름으로 home.html에서 쓰겠다는 것을 알려줍니다.
그리고 home.html을 다음과 같이 작성합니다.
post 라는 것에는 Post에 있는 모든 객체를 다 담았으므로 한 개, 두 개, 혹은 수 백개가 담겨있을 수 있습니다. 그러므로 for문을 이용해 표시해주면 좋을 것 같은데 html에서 {% for ~~ %} {% endfor %} 를 이용하면 for문을 적용할 수 있습니다. ( if문도 가능합니다! )
그리고 for post in post (posts라고 하면 더 좋았겠네요 ㅎㅎㅎ) 를 돌면서 post.title, post.body를 출력합니다.
이는 post 라는 model (class) 내에 title, body의 값을 불러온다는 의미입니다.
저렇게 한 뒤 서버를 켜면 다음과 같습니다.
첫 번째 글과 두 번째 글의 제목과 내용이 출력됩니다.
'django' 카테고리의 다른 글
django / base.html 만들기 (템플릿 상속) (0) | 2020.12.03 |
---|---|
django / detail 페이지 만들기 (링크 연결+pk) (0) | 2020.12.03 |
django / 프로젝트, 앱 만들기, 기본 화면 출력 (0) | 2020.12.02 |
django 시작, 설치하기 (0) | 2020.12.02 |
django를 시작한 이유 (0) | 2020.12.02 |