들어가기전 urls.py에서 디렉토리의 개념
path 중
blog/<int:blog_id> 와 /blog/<int:blog_id>의 차이에 대해서 알아보자.
우선 blog/<int:blog_id>는 기존주소 + blog/pk값 이고
/blog/<int:blog_id> 는 최상위주소 + blog/pk 값이다
글쓰기 기능 구현
매번 admin 페이지에 가서 글쓰기를 할 수 없는 법
메인 페이지에서 글쓰기 기능을 구현해보자
write.html을 만들고 url과 views.py를 작성하면 된다
기존 hello wolrd 할 때 처럼 그냥 기본형으로 작성하면 된다.
#views.py
def write(request):
return render(request, 'write.html')
#urls.py
path('write/',myapp.views.write, name='write'),
<div class="container">
<br><br>
<form action ="{%url 'create'%}">
<h4>제목</h4>
<input type="text" name='write_title'>
<h4>내용</h4>
<textarea rows="20" cols="40" name='write_content'></textarea>
<br>
<input type="submit" value="제출하기">
</form>
</div>
form 태그를 이용해 글쓰는 양식을 받아준다.
form태그의 action 속성은 우리가 작성한 내용을 어떠한 url로 보내라는 뜻이다.
나는 우리가 작성한 내용을 create라는 url로 보내라고 했다.
작성이 끝나면 create라는 url을 호출하고
xxxxxxxxxx
path('blog/create',myapp.views.create, name ='create'),
urls.py에 새로 적은 이 코드가 실행된다.
path는 html페이지로만 이동 할 수 있는것이 아니라 함수호출이 된다.
즉 path는 어떤 URL이 들어오면, (어디에있는)어떤 함수를 실행시켜라
그럼 views.py에 있는 create 함수로 흘러가게 된다.
def create(request):
oh = Form()
oh.title = request.GET['write_title']
oh.content = request.GET['write_content']
oh.pub_date = timezone.datetime.now()
oh.save()
return redirect('/blog/'+str(oh.id))
코드를 해석해보면 내가 임의로 정한 변수명 oh는 우리가 model에서 작성해 주었던 클래스의 구조를 가지는 객체를 만드는 것이다.
그리고 아까 위에서 지정한 write_title과 write_content를 넣어준다
timezone.datetime.now()는 views.py에서 import를 해줘야 한다
from django.utils import timezone
그리고 쿼리셋메소드 oh.save() 는 작성받은 객체를 데이터베이스에 등록하는 행위이다
자 다음 redirect에 대해서 알아보자
redirect 또한 import를 해줘야 한다
from django.shortcuts import render, get_object_or_404, redirect
기존에 있던 import에 redirect를 추가해주자.
redirect는 바로 이 페이지로 이동하게 할 수 있는 메소드이며 google.com 처럼 외부주소로도 호출 할 수 있다.
redirect는 인자로 url을 받는다.
즉 글을 쓰면 그 글을쓴 detail페이지로 바로 가게 되는 것이다.
'Django' 카테고리의 다른 글
11. 상속 (0) | 2020.03.25 |
---|---|
10. static과 media (0) | 2020.03.25 |
08 BlogProject (1) (0) | 2020.03.23 |
07 모델(2) (0) | 2020.03.20 |
06. 모델(1) (0) | 2020.03.20 |