멋쟁이 사자처럼 10기/세션

2022/05/06 <django Blog #1 세션>

cha2y0ung 2022. 5. 12. 21:18
728x90

블로그 프로젝트 준비

source newvenv/Scripts/activate

 

django-admin startproject blogproject -> 장고 프로젝트 생성

 

앱 생성

python manage.py startapp blog

 

settings.py에 앱 등록 : blog.apps.BlogConfig

 

python manage.py createsuperuser

python manage.py runserver

-> admin 페이지 생성

 

컴퓨터 소프트웨어의 기본적인 데이터 처리 기능 : CRUD

C : create

R : read

U : update

D : delete

 

R : 데이터베이스에서 데이터를 가져와서 읽을 수 있도록!!

쿼리셋과 메소드 이용

쿼리셋 : 데이터베이스(models.py)로부터 데이터를 객체 형태로 받아오는 것

메소드 : 쿼리셋을 이용할 수 있도록 작성된 함수

 

Model : 데이터를 담는 그릇

그릇 이름 : 그릇에 담을 내용물의 데이터 타입

CharField는 글의 제목과 같은 비교적 짧은 문자열

DateTimeField는 날짜와 시간 데이터

TextField는 긴 문자열 처리할때 이용

 

ex)

class Blog(models.Model):
	title = models.CharField(max_length = 200)
    date = models.DateTimeField('date published')
    body = models.TextField()
    
    def __str__(self):
    	return self.title

 

models.py 수정한 이후에는 꼭 모델의 변경사항을 반영 migrate 해야한다

python manage.py makemigrations

python manage.py migrate

 

admin.py 들어가서 model 등록

from .models import Blog
#register your models here.
admin.site.register(Blog)

 

html은 쿼리셋을 출력하기 위해!!

template 폴더 만들고 그 안에 home.html 파일 만들어주기

 

views.py

from django.shortcuts import render
from .models import Blog

def home(request):
	blogs = Blog.objects
    return render(request, 'home.html', {'blogs':blogs})

blogs 쿼리셋은 home.html에 blogs라는 이름으로 전달된다

 

페이지 연결하기!!

urls.py

from django.contrib import admin
from django.urls import path
import blog.views

urlpatterns = [
	path('admin/', admin.site.urls),
    path('', blog.views.home, name="home"),
]

blog 폴더의 views.py 파일 가져와서 views.py의 home함수를 실행시키고 home.html 파일 출력하라는 뜻

 

데이터 출력하기!!

views.py의 home함수에서 blogs라는 이름으로 데이터 쿼리셋 받아왔으므로

home.html에서 데이터 출력하려면 객체 묶음인 blogs 쿼리셋을 다시 쪼개서 하나하나 출력해줘야함

def home(request):
	blogs = Blog.objects
    return render(request, 'home.html', {'blogs': blogs})

blogs 쿼리셋(blogs.all)을 쪼갠 객체를 blog라고 하고

blog 객체의 제목 출력

blog 객체의 날짜 출력

blog 객체의 본문 출력

을 for 문이 끝날때까지 반복 -> 객체 다 출력될 때까지

 

{%for blog in blogs.all%}
{{blog.title}}
{{blog.date}}
<br> #이건 한줄 띄우기!
{{blog.body}}
{%endfor%}

 

디테일 페이지 만들기

models.py 의 Blog클래스 안에 body 일부분만 반환한느 summary 메소드 작성

데이터를 100글자까지만 반환

from turtle import title
from django.db import models

#create your models here.

class Blog(models.Model):
	title = models.CharField(max_length = 200)
    date = models.DateTimeField('date published')
    body = models.TextField()
    
    def__str__(self):
    	return self.title
    
    def summary(self):
    	return self.body[:100]

home.html에서 {{blog.body}}를 {{blog.summary}}로 바꿔준다

 

views.py에서 

from django.shortcuts import render get_object_or_404
from .models import Blog

def home(request):
	blogs = Blog.objects
    return render(request, 'home.html', {'blogs': blogs'})
   
def detail(request, blog_id):
	blog_detail = get_object_or_404(Blog, pk = blog_id)
    return render(request, 'detail.html', {'blog':blog_detail})

존재하지 않는 객체 요청했을때 404 에러창 띄우기

Blog 객체 중 blog_id에 해당하는 객체를 blog_detail 변수에 저장하고 detail.html에 blog라는 이름으로 전달하세요~!

 

urls.py에

path('blog/<int:blog_id>', blog.views.detail, name = "detail'), 추가해주기

 

home.html에

<a href = "{% url 'detail' blog.id%}">...more</a> 추가해서 디테일 페이지를 하이퍼링크로 연결

 

'멋쟁이 사자처럼 10기 > 세션' 카테고리의 다른 글

2022/05/13 <1:N & M:N 세션>  (0) 2022.06.07
2022/05/06 <django Blog #2 세션>  (0) 2022.05.14
2022/04/08 <django 기초 세션>  (0) 2022.05.12
2022/04/05 <Git 세션>  (0) 2022.05.09
2022/04/01 <Python 세션>  (0) 2022.05.09