Create, Read, Update, Delete
글을 생성하고 읽고 수정하고 삭제하도록 할 수 있는 기능
= 모델은 만든다 = 우리가 처리하고자 하는 데이터가 어떤 종류의 데이터인지 설명하는 거
1. admin.py에 관리자 사이트는 content라는 모델을 관리할 수 있어 라고 아래와 같이 적어준다
from .models import Content
admin.site.register(Content)
mydiary>models.py에 Content라는 모델을 만들어준다
1:UTF-8(한글 인식 관련)인코딩을 위해 설정해주는 부분
2:장고에 내재된 (미리 만들어져 있는)timezone 패키지를 사용
3:장고에 내재된 (미리 만들어져 있는)Model(데이터베이스에 접근하는 성질)패키지를
사용
6:Content라는 이름의 모델을 만들자!(class로 정의)
7:Content모델은 200자 아내(max_length=200)의 짧은 글(CharField)인 제목(title)
을 가짐
8:Content모델은 기본 설정이 현재 시간으로 되어 있는(default=timezone.now),
날짜와 시간(DateTimeField)이 들어가는 발행 일시(pub_date)를 가짐
9:Content모델은 길이 제한 없는(default=’’) 긴 글(TextField)인 본문(body)으로 이루
어져 있음
Migration 해주기
: migration을 해준다 => 우리가 만든 모델이 진짜 데이터베이스에 반영되려면 거쳐야 하는 작업
(1) 지금 작성한 것 까지 migrate할거야 라고 기록 남겨두기
=> 이는 이정표가 되어 나중에 트래킹을 가능하게 해쥼
: python manage.py makemigrations
(2) 지금 작성한 것 까지 DB에 진짜 반영
: python manage.py migrate
서버 작동 => python manage.py runserver
==> BUT 게시판을 운영할 거면서, 사람들에게 ADMIN 아이디 알려주고 ADMIN 페이지에서 글을 쓸 수 있게 하면 안됨 ===> 일반 유저, ADMIN이 아닌 사람들도 글을 쓸 수 있는 페이지와 글을 볼 수 있는 목록 페이지를 만들어줘야함
고객에게 전달할 요리를 담을 그릇을 만듬 => 내용물을 채워야 한다
view는 모델에게 user의 요청사항을 전달하고 model이 db로부터 가져온 객체를 template에 보여주는 역할을 한다, 종업원이 손님한테 주문 받고 요리사의 요리를 손님에게 전해주는 것과 similar ===> 따라서 우리는 views.py에 각 요청을 처리하는 함수를 추가해준다
def home(request):
post = Content.objects.all()
return render(request, 'home.html', {'posts_list':posts)
==> post는 콘텐츠에서의 모든 object를 넣는 변수
==> post 변수에 있는 내용을 'posts_list'라는 이름으로 home.html에 넘겨줄것
1:장고에 내재된(미리 만들어져 있는) render,redirect패키지를 사용
2:같은 디렉토리(폴더)안의 models.py에서 정의한 class인 Content를 가져와 사용
6:home이라는 이름의 함수를 만듬(해당 함수는 요청을 받으면 작동됨)
7:Content라는 모델이 가지고 오는 모든 DB데이터들을 posts에 담기
8:home.html에 ‘posts_list’라는 이름으로 넘김 <key:value형태>
(+) urls.py pattern :
path ('admin/', admin.site.urls),
=> 기본 주소 /admin으로 끝나느 irl은 admin 사이트로 연결
path ('', views.home, name="home")
=> 기본 주소 뒤에 아무것도 안 붙는 url은 views.py에 정의한 함수 중 home으로 연결할거고(view 파일의 home함수를 부를거고) 그 연결을 home이라고 부른다 (이 경로를 home이라고 부르겟다)
home.html
=> 반복문이 다 돌고나면 posts가 받아온 모든 데이터들을 화면에 띄울 수 있다
1: 페이지 상단 제목 h1 태그
3-8: 파이썬 for 반복문 문법
=> Home.html 로 posts_list에 담겨 넘어온 데이터들을 반복문으로 돌려 하나씩 순회하면서, 게시물의 제목을 h3태그로, 게시물의 발행날짜와 본문을 p 태그로, 게시물 하나가 끝나면 구분선을 하나 긋는다. =>hr 태그
=> 이렇게 되면 아까 admin에서 작성해준 글이 잘 보인다
=> form : 장고를 활용해 웹사이트를 만들 때 사용자에게 보여주기 위한 기능 뿐만 아니라 사용자가 데이터를 입력할 수 있어야 함
=> 장고는 입력에 대한 처리를 할 수 있는 form 기능을 제공한다
=> html에서 form은 사용자에게 데이터를 입력할 수 있ㄷ록 하고 서버로 데이터를 보내주는 역할을 한다
1:장고에 내재된(미리 만들어져 있는)forms패키지를 사용
2:같은 디렉토리(폴더)안에 있는 models.py 파일에서 Content모델을 사용
4:게시물 작성을 위한 ContentForm을 작성
5-7:(~Meta는 Form을 쓸 사람을 위해 장고가 정해놓은 문법)
폼이 다루는 모델 = Content
폼이 가진 필드(항목) = 제목,본문
(발행 일시는 발행되는 순간 그 시각으로 자동 입력 -> 유저가 작성할 필요 X)
유저가 페이지를 view에 요청하고, 페이지가 이동하는 방식에는 여러가지가 있다 => 그 중 가장 대표적인 것 GET * POST
=> GET : 지정한 URL의 정보를 가져오는 메소드, 가장 多 사용
(EX)
=> POST : 리소스를 생성하는 것, 블로그에 글을 등록하는 경우
(EX)
cf) 에러 체크
*만일 위처럼 했는데, new의 폼을 채운 후 home.html로 redirect 되지 않는 등의 에러가 발생하면?
new url을 세 개 중 가장 첫번째 순서로 등록해보세요!
에러의 원인: 대부분의 언어는 파일을 위에서부터 아래 순서대로 읽는데, 그 순서로 인해 일종의 혼돈이 발생하는 것입니다.
만일 잘 된다면 그냥 넘어가시면 됩니다!
3: ‘일기 작성하기’라고 적힌 링크를 클릭하면 new.html로 연결되는 a 태그