일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- HTML역사
- 페이지분석
- 숫자형식오류
- 함수
- DoIt
- 데이터베이스
- 생성자
- 우아한테크
- 크롤링
- 예외
- DoitSQL
- html
- 예제
- 숫자 형식
- dbms
- 자바 오류
- 크롤링 오류
- Doit입문SQL
- 웹브라우저 수용도
- 키-값 데이터베이스
- 웹 브라우저 전쟁
- R1C3
- 함수 선언
- 배열 예제
- 배열 3요소
- 자바
- 자바 예외
- SQL입문
- DoitSQL입문
- SQL
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- HTML역사
- 페이지분석
- 숫자형식오류
- 함수
- DoIt
- 데이터베이스
- 생성자
- 우아한테크
- 크롤링
- 예외
- DoitSQL
- html
- 예제
- 숫자 형식
- dbms
- 자바 오류
- 크롤링 오류
- Doit입문SQL
- 웹브라우저 수용도
- 키-값 데이터베이스
- 웹 브라우저 전쟁
- R1C3
- 함수 선언
- 배열 예제
- 배열 3요소
- 자바
- 자바 예외
- SQL입문
- DoitSQL입문
- SQL
- Today
- Total
프로그래밍
[Django] 장고 View 본문
2023.11.27.월
장고 View
Django의 뷰는 애플리케이션의 "로직"을 처리한다
Django의 뷰(Views)는 웹 요청을 받아 처리하고 웹 응답을 반환한다
데이터베이스로부터 데이터를 가져오고 ( Model )
필요한 작업을 수행한 후 ( View )
데이터를 템플릿에 전달하여 렌더링한다 ( Template )
함수 기반 뷰(Function-Based Views, FBVs) VS 클래스 기반 뷰(Class-Based Views, CBVs)
장고에서는 대략적으로 2가지 방법으로 뷰를 작성한다
- 함수 기반 뷰(Function-Based Views, FBVs)
- 클래스 기반 뷰(Class-Based Views, CBVs)
FBV는 비교적 간단하고 직관적이다
요청을 받아 작업을 수행하고 응답을 반환하는 Python 함수이다
# 함수 기반 뷰(Function-Based Views, FBVs)
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("Hello, World!")
CBV는 재사용 가능한 뷰 클래스로 작성하는 방식이다
CBV는 객체 목록 표시나 단일 객체의 상세 뷰와 같은 데이터 작업에 대한 공통 패턴을 캡슐화한다
비슷한 기능끼리 묶을 수 있어 응집도가 향상된다
# 클래스 기반 뷰(Class-Based Views, CBVs)
from django.views import View
from django.http import HttpResponse
class HelloWorldView(View):
def get(self, request):
return HttpResponse("Hello, World!")
CBV에서는 메서드가 HTTP 동사와 대응한다
get(), post(), put(), delete() 등이 있다
CBV는 믹스인(mixins)과 제네릭 뷰(generic views)와 같은 재사용과 확장을 쉽게하기 위한 메커니즘도 제공한다
함수 기반 뷰(FBVs) | 클래스 기반 뷰(CBVs) | |
장점 | - 간단하고 이해하기 쉬움 - 유연하며 복잡한 로직과 커스터마이징이 가능 - 적은 보일러플레이트 코드를 갖음 - 익숙한 Python 함수로 작성되어 진입 장벽이 낮음 |
- 코드 재사용성을 통한 개발 속도 향상 - 내장된 기능을 통한 간편한 구현 - 관심사를 분리하여 코드 유지보수성을 향상 |
단점 | - 반복적인 코드 작성으로 인한 중복 코드 발생 가능성 - 코드 재사용성이 부족하여 유지보수에 불리 - 객체지향 프로그래밍의 이점을 활용할 수 없음 |
- 객체지향 기능의 제한으로 일부 복잡한 상황에서 코드 이해에 어려울 수 있음 - 학습 곡선이 높음 - 구문이 상대적으로 복잡하여 코드가 길어질 수 있음 |
뷰에서 HTTP 요청과 응답 처리하기
각 Django 뷰 함수는 최소한 하나의 매개변수를 가져야 한다
일반적으로 이 매개변수는 request이다
이 객체에는 현재 요청에 대한 메타데이터(사용자에 대한 세부 정보, HTTP 헤더, 메서드(GET, POST 등), 요청에 포함된 매개변수 등)가 포함된다
뷰는 HttpResponse 인스턴스 또는 그 하위 클래스를 반환해야 합니다.
이 객체는 클라이언트로 보내는 HTTP 응답을 캡슐화한다
from django.views import View
from django.http import HttpResponse
class HelloWorldView(View):
def get(self, request): # 뷰 함수의 매개변수 request
return HttpResponse("Hello, World!") # HttpResponse 인스턴스 반환
HttpResponse 인스턴스를 생성하려면
HTML로 클라이언트로 보낼 문자열 매개변수로 인스턴스를 생성하면 된다
URL 패턴 및 URL 라우팅 작업
URL과 해당 URL에 대해 호출되어야 하는 뷰 함수 간의 매핑이 URLconf이다
Django의 URL 라우팅을 사용하면 URL을 뷰와 유연하게 매핑할 수 있다
URL 패턴은 "URLconfs"라고 불리는 Python 모듈에 정의된다
path 함수나 복잡하거나 기존의 URL 패턴에 대해서는 re_path 함수를 통해 뷰 함수와 매핑한다
# URLconf의 예시
from django.urls import path
from .views import HelloWorldView
urlpatterns = [
path('hello/', HelloWorldView.as_view()),
]
# config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('pybo/', include('pybo.urls')),
]
# pybo/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
path('<int:question_id>/', views.detail, name='detail'), # URL 별칭 지정
]
위와 같이 url을 나누어서 맵핑할 수 있다
url을 나누어 맵핑할 시 pybo/urls만 바뀌면 해당 맵핑만 수정하기만 하면 된다
config/urls.py | pybo/urls.py | 최종 URL | ||
'pybo/' | + | '' | = | 'pybo/' |
'pybo/' | + | 'question/create/' | = | 'pybo/question/create/' |
Django의 내장 제네릭 뷰 사용하기
Django는 제네릭 클래스 기반 뷰를 지원한다
이러한 뷰들은 django.views.generic.View를 상속하며, 각각 특정한 기능을 제공한다
TemplateView : 주어진 템플릿을 렌더링
RedirectView : 다른 URL로 리디렉션을 제공
ListView : 객체 목록을 표시
DetailView : 단일 객체의 상세 뷰를 표시
CreateView, UpdateView, DeleteView : 객체를 생성, 업데이트, 삭제하기 위한 폼을 제공
중복 코드를 줄여주며 시간단축 또한 가능하다
# 제너릭 뷰 예시
from django.views.generic import ListView
from .models import Book
class BookListView(ListView):
model = Book
'Python > Django' 카테고리의 다른 글
[Django] 장고 Template 활용 예제(+에러페이지) (0) | 2023.11.28 |
---|---|
[Django] 장고 Template (0) | 2023.11.28 |
[Django] 장고 관리자(Admin) (0) | 2023.11.27 |
[Django] 장고 Model 사용(생성, 조회, 수정, 삭제, 작성) (1) | 2023.11.27 |
[Django] 장고 Model (1) | 2023.11.24 |