※ Do it! 장고 + 부트스트랩 파이썬 웹 개발의 정석(이성용, 김태곤 / 이지스퍼블리싱) 책을 참고하여 프로젝트를 진행하고 있습니다.
프로젝트 진행과정을 기록하기 위해 작성하고 있으므로 책 저작권을 위해서 간단한 내용 외 자세한 코드와 내용은 작성하지 않습니다.
views.py
urls.py에 들어갈 함수나 클래스 등 정의한다.
views 구현하는 두가지 방식 : FBV, CBV
FBV(Function based view)
함수에 기반을 둔 방법. 함수를 직접 만들어 원하는 기능을 직접 구현
- blog/views.py (FBV방식)
# blog/views.py FBV방식 구현
from django.shortcuts import render
from .models import Post # views.py에서 DB에 쿼리를 날려 원하는 레코드 가져옴
def index(request):
posts = Post.objects.all().order_by('-pk') # order by pk : 역순 정렬
return render(
request,
'blog/index.html',
{
'posts': posts,
}
)
def single_post_page(request, pk):
post = Post.objects.get(pk=pk)
return render(
request,
'blog/single_post_page.html',
{
'post': post,
}
)
- blog/urls.py (FBV방식)
from django.urls import path
from . import views # views.py를 사용할 수 있게 하는 코드
# url과 url이 들어왔을 때 처리 방법 명시
urlpatterns = [
path('<int:pk>/', views.single_post_page), # /blog/뒤에 정수가 붙는다면 views.py의 single_post_page()함수에 정의 된 대로 처리
path('', views.index) # 도메인 뒤에 /blog/가 붙는다면 views.py의 index()함수에 정의 된 대로 처리
]
CBV(Class based view)
장고가 제공하는 클래스를 활용해 구현하는 방법
(장고는 웹 개발 할 때 반복적으로 많이 구현하는 것들을 클래스로 미리 만들어서 제공하고 있다.)
- blog/views.py (CBV방식)
from django.views.generic import ListView # 장고에서 제공하는 ListView 사용할 것이다.
from .models import Post # views.py에서 DB에 쿼리를 날려 원하는 레코드 가져옴
class PostList(ListView): # 포스트 목록 페이지
model = Post
ordering = '-pk' # 역순 정렬
# 이 코드를 적지 않으면 post_list.html을 기본으로 찾는다.
# template_name = 'blog/index.html'
class PostDetail(DetailView): # 포스트 상세 페이지
model = Post
- blog/urls.py (CBV방식)
from django.urls import path
from . import views # views.py를 사용할 수 있게 하는 코드
# url과 url이 들어왔을 때 처리 방법 명시
urlpatterns = [
path('<int:pk>/', views.PostDetail.as_view()),
path('', views.PostList.as_view()),
- blog/templates/blog/post_list.html (index.html) (CBV방식)
post_list.html(index.html) 코드는 FBV와 CBV방식이 for문안에 posts(FBV), post_list(CBV)만 제외하고는 동일
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Blog</title>
</head>
<body>
<h1>Blog</h1>
<!--post 레코드 나열-->
{% for p in post_list %}
<hr/>
<h2><a href="{{ p.get_absolute_url }}">{{ p.title }}</a></h2> <!--post 제목 클릭하면 post 화면으로 이동 blog/models.py에 함수 생성-->
<h4>{{ p.created_at }}</h4> <!--post 시간-->
<p>{{ p.content }}</p> <!--post 내용-->
{% endfor %}
</body>
</html>
위와 같이 FBV방식을 CBV방식으로 구현하면 간단하게 사용할 수 있다.
- 포스트 목록 페이지 (도메인/blog/)
- 포스트 상세 페이지 (도메인/blog/정수/)
'Web > Django, Bootstrap' 카테고리의 다른 글
[Blog 만들기] #6 IF문 사용하여 블로그 목록 페이지 오류 해결 (0) | 2022.04.10 |
---|---|
[Blog 만들기] #5 블로그 포스트 미디어 파일 넣기 (0) | 2022.04.08 |
[Blog 만들기] #3 장고 구조, 블로그 페이지 구성 (0) | 2022.04.04 |
[Blog 만들기] #2 부트스트랩 적용해보기 (0) | 2022.03.30 |
[Blog 만들기] #1 html, CSS, Javascript, 부트스트랩 (0) | 2022.03.29 |
댓글