본문 바로가기
Python/Django Ⅱ

V : View(뷰)

by Mr.DonyStark 2024. 5. 3.

중간정리 : Model, Template 작업처리가 끝났다면 app의 view.py에서 작업을 진행해야함.

→ Model 작업

https://dandora-90.tistory.com/337

 

M : Model(모델)

1. 모델은 프로젝트를 위한 앱의 데이터와 관련된 부분이며, 이를 다루는 영역2. 데이터베이스에 저장될 데이터의 모양을 정의하고 관련된 일부 기능을 설정해주는 영역임3. 즉, 모델을 데이터

dandora-90.tistory.com

Template 작업

https://dandora-90.tistory.com/338

 

T : Template(템플릿)

1. 사용자에게 보이는 부분2. 웹 페이지의 골격 즉, HTML로 작성된 부분이라는 것을 의미3. Django만의 장점 템플릿 태그 { } 사용. { } 활용하여 조건문, 반복문, 모델의 변수처리 가능.  (1) 태그와 태

dandora-90.tistory.com

1. 뷰는 템플릿과 모델 사이를 이어주는 다리같은 역할임

2. 모델을 통해 데이터에 접근하여 템플릿으로부터 요청 받은 데이터를 뽑아와 템플릿에게 답변을 보냄

3. 즉, 요청/응답개념임

4. 프론트엔트가 백앤드에게 데이터를 요청했을 때 백엔드에서 데이터를 뽑아서 프론트엔드에게 제공해주는 과정을 뷰가 처리

5. 장고에서 제일 핵심이 모델이었다면 코드에서 제일 많은 비중을 차지하는 것이 뷰임. 그만큼 뷰를 만드는 방법이 다양함.

  (1) 함수형 뷰

  (2) 클래스형 뷰

6. render함수 와 ORM(Object Relational Mapping)

  (1) render 함수를 사용해 템플릿이 웹에 보여지도록 가공. 아래 이미지에서 photo_list 호출시 photo_list.html이 나타나도록 지정

  (2) ORM

     - 객체와 관계형 데이터베이스 간의 변환을 자동으로 처리하는 도구

     - 데이터베이스 테이블을 객체로, 데이터베이스 레코드를 객체의 인스턴스로 다룰 수 있음

     - 장고 ORM을 사용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스를 조작할 수 있어 개발자가 데이터베이스와 상호작용할 때 생산성을 높일 수 있음

     - models.py에서 생성한 클래스명을 활용하여 views.py에 다음과 같이 코딩하여 변수처리 후 템플릿에서 뿌려줄 수 있도록 한다.

from django.shortcuts import render
from .models import Photo

def photo_list(request):
    photos = Photo.objects.all() #app models.py에서 생성한 클래스를 모두 변수에 담음
    return render(request, "photo_list.html", {"photos":photos}) #템플릿에서 photos를 호출하여 model의 모든 속성(필드)를 호출 활용가능

app 하위 model.py에서 생성한 클래스를 view.py에서 orm 기능을 활용하여 변수처리를 한후 이를 템플릿에 뿌려줌

 

   (3) (1)~(2)를 통해 아래 템플릿에서 값을 뿌려줌 : views.py에서 orm을 사용해 생성한 변수를 불러와 값을 뿌려주도록 지정.(참고: https://dandora-90.tistory.com/338)

<html>
    <head>
        <title>
            Photo App
        </title>
    </head>
    <body>
        <h1><a href="">사진목록 페이지</a></h1>
        <section>
            {% for photo in photos %} <!--app models.py 생성한 클래스 → 뷰에서 ORM을 사용해 photos라는 변수에 담음 → 반복문을 활용해 변수 즉, 변수안의 필드값 호출 -->
            <div>
                <h2>
                    <a href="">{{photo.title}}</a>
                </h2>
                <img src="{{photo.image}}" alt="{{photo.title}}" width="300"/>
                <p>{{photo.author}}, {{photo.price}}</p>
            </div>
        </section>
        {% endfor %}
    </body>
</html>

 

7. Model, View, Template 작업이 끝났다면 URL 작업을 해야함.

  (1) 기본적으로 app관련 생성, 작업이 끝나면, app에대한 url을 지정해줘야함. 

  (2) Django에서는 프로젝트 생성시 프로젝트의 전체 url을 관리해주는 urls.py가 존재하지만 app 생성시 urls.py는 없으므로 직접 별도 생성해줘야함

  (3) Project > urls.py

      * include 함수를 사용하여 호출 후 path를 추가해 app에서 지정한 url 을 추가함

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",include("photo.urls"))
]

 

  (4) app > urls.py

     - " " 루트 주소 즉, 작성자 기준으로는 127.0.0.1:8000 의미

     - app > views.py에서 지정한 함수 호출되도록 지정

from django.urls import path
from . import views

#""는 기본주소 settings.py 에서 정의한 url 주소
urlpatterns = [
    path("",views.photo_list,name="photo_list")
]