※ Do it! 장고 + 부트스트랩 파이썬 웹 개발의 정석(이성용, 김태곤 / 이지스퍼블리싱) 책을 참고하여 프로젝트를 진행하고 있습니다.
프로젝트 진행과정을 기록하기 위해 작성하고 있으므로 책 저작권을 위해서 간단한 내용 외 자세한 코드와 내용은 작성하지 않습니다.
Django(장고)의 작동 구조
Django(장고)의 파일 구조
blog 만들기 프로젝트 기반으로 생성되어있는 파일 구조이다.
Project.app
urls.py
클라이언트가 요청하는 사이트 URL(ex-young.com)로 접속했을 때는 기본 url : young.com으로 이동하고 young.com/blog/로 접속한다면 blog 함수를 실행시키자 라는 내용들이 기술되어있다.
urlpatterns 리스트의 항목(endpoint, 대상)에 따라 request를 라우팅 한다.
위 코드에서는 엔드 포인트가 'blog/' 일 때는 blog앱의 urls, 'admin/' 일 때는 장고의 기본 admin urls , 아무것도 입력되지 않았을 때는 single_pages앱의 urls를 라우팅 한다.
admin.py
GUI를 통해 관리할 모델을 선언한다.
from django.contrib import admin
from .models import Post
admin.site.register(Post)
관리자 ID과 비밀번호로 접근한다.
Blog.app
models.app
post에 대한 내용 정의
ex) '게시글이 담아야 할 정보는 제목, 글 내용, 작성자 작성일이다.'와 같은 식으로 정의
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self): # post name setting
return f'[{self.pk}]{self.title}'
def get_absolute_url(self): # blog\template\blog\index.html title click setting
return f'/blog/{self.pk}'
urls.app
project app에서 엔드포인트에 따라 라우팅 될 view 정의
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()함수에 정의된 대로 처리
]
'/blog/' 뒤에 아무것도 적히지 않았을 때는 views.py의 index()에 정의된 대로 처리
'/blog/정수'가 붙는다면 views.py의 single_post_page() 함수에 정의된 대로 처리
views.py
request가 최종적으로 라우팅 되어 동작시킬 로직 정의
urls.py에서 언급하는 함수 또는 클래스 정의
from django.shortcuts import render
from .models import Post # views.py에서 DB에 쿼리를 날려 원하는 레코드 가져옴
# Create your views here.
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,
}
)
블로그 페이지 구성
책을 보면서 만들 블로그는 아래와 같이 구성되어있다.
페이지 | URL | |
대문 페이지 | 도메인/ | |
블로그 페이지 | 포스트 목록 | 도메인/blog/ |
포스트 상세 | 도메인/blog/포스트pk | |
자기소개페이지 | 도메인/about_me |
'Web > Django, Bootstrap' 카테고리의 다른 글
[Blog 만들기] #6 IF문 사용하여 블로그 목록 페이지 오류 해결 (0) | 2022.04.10 |
---|---|
[Blog 만들기] #5 블로그 포스트 미디어 파일 넣기 (0) | 2022.04.08 |
[Blog 만들기] #4 FBV 방식, CBV 방식 (0) | 2022.04.05 |
[Blog 만들기] #2 부트스트랩 적용해보기 (0) | 2022.03.30 |
[Blog 만들기] #1 html, CSS, Javascript, 부트스트랩 (0) | 2022.03.29 |
댓글