< 요약 >
admin페이지에서 글쓰기 하지 말고, 글쓰는 페이지 만듭시다.
- template 만들기 ( 게시글 등록 화면 만들기)
- View 만들기 & url설정하기 & template에 링크 넣기
- 제출하기 버튼 작동하게 하기
- redirect 와 render 차이?
< 배운것 >
1. rediract
2. template에서 함수를 실행하려면 url도 만들어야 한다.
3. redirect 와 render 차이?
1. template 만들기 ( 게시글 등록 화면 만들기)
<h1>글쓰기 페이지 입니다</h1>
<form action="">
<h4>제목: </h4>
<input type="text" name="title">
<br>
<br>
<h4>본문: </h4>
<textarea cols=40 rows=10 name="body"></textarea>
<br>
<br>
<input class="btn btn-dark" type="submit" value="제출하기">
</form>
View 만들기 & url설정하기 & template에 링크 넣기
def new(request):
return render(request, 'new.html')
그리고 urls.py에서 만든 함수를 연결해주자.
path('blog/new/', blog.views.new, name='new')
그리고 제대로 화면이 나오는지 확인해보자.
python manage.py runserver
다음 주소로 입력했을때 화면이 잘 보이는 지 확인한 모습이다.
3. 제출하기 버튼 작동하게 하기
위에 글쓰기 페이지를 보면 제출하기가 구현되어 있다. 이 기능을 작동하게 만들어 보자.
그럼 우리가 '제출하기' 버튼을 누르면 어떤 기능이 되야하는지 생각해봐야하고 그것들을 개발해야한다.
기능은 다음과 같다.
1.글을 적고 '제출하기'를 누르면 우리가 적은 데이터는 DB에 가서 저장이 되고,
2.home.html 에 보여줘야 한다.
여기서 우리는 create 함수를 만들어서 new.html에 작성한 파일을 home.html에 보내게 할 것이다.
create함수는 view.py에서 작성하지만, create함수를 template에 실행하려면 URL을 따로 만들어야한다.
우선 new.html 에서 제출하기를 누르면 create 함수를 실행시키는 코드르 넣자.
<form action="{% url 'create' %}">
사진으로 보면 이렇게 된다.
이제 데이터를 전달하는 함수를 작성해줘야한다.
views.py에서 작성할 함수는 다음과 같다.
입력받은 내용을 DB에 넣어주는 함수
이 함수명은 create 이고 이 함수는 html을 띄어주는것이 아닌 데이터만 처리하는 함수이다.
view.py를 다음과 같이 추가 해준다.
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from .models import Blog
# Create your views here.
def create(request):
blog = Blog()
blog.title = request.GET['title']
blog.body = request.GET['body']
blog.pub_date = timezone.datetime.now()
blog.save()
return redirect('/blog/' + str(blog.id))
사진으로 보면
.create라는 함수는 blog를 불러와서 우리가 모델에 정의했던 데이터 모양대로 하나하나 넣어주는 작업이다.
<코드 설명>
- request.GET['title']은 new.html 파일에 form태그 안에 있는 녀석입니다. 코드를 확인해 보면 name="title"이라고 적혀있을텐데 그래서 GET[] 안에 'title'이 들어가는 겁니다. blog.body도 동일한 논리입니다.
- blog.pub_date 의 경우는 입력한 시간이 자동으로 넘어가게끔 코드를 구성했습니다. 이때 timezone이라는 패키지를 사용해야해서 두번째 줄에 보면 import를 해주는 겁니다.
- redirect 는 요청을 처리하고 보여주는 페이지 입니다. render가 '요청이 들어오면 이 html 파일을 보여줘 라는 녀석'이였다면, redirect는 '요청을 들어오면 저쪽 url로 보내버려' 하는 녀석입니다.
url을 넣어주자.
path('blog/create/', blog.views.create, name='create'),
path를 한 줄 추가한해서 creat함수를 new.html에서 사용하게 만들어주자 . 이 url은 html 페이지를 띄우는 것이 아니고 단순히 create함수를 호출하라는 뜻이다. 따라서 create.html은 없다. (path의 갯수가 html 페이지의 갯수와 비례하지 않는다는 사실을 기억하자.)
4. redirect, render 차이점
render , redirect는 둘다 띄우라는 함수다.
용도 겹치지만, 인자에 따라서 render , redirect 상황이 달라진다.
1.redirect 함수는 뒤에 url을 받는다 .
ex. return rediract (' https://google.com ')
2. render 함수는 파이썬 변수를 키값으로 받아서 html에서 지지고 볶을때 사용하한다.
ex. return render(request, 'home.html', {'blogs' : blogs}
정리하자면.
redirct : 마지막으로 url을 실행할 때 씀
render : template에서 템플릿함수를 쓰고 싶을때 씀
'Django > Django Blog' 카테고리의 다른 글
5. Django 블로그 만들기 ( 템플릿 상속, url 관리) (0) | 2019.12.10 |
---|---|
4-2. Django 블로그 만들기 (media 정적파일) (1) | 2019.12.10 |
4-1. Django 블로그 만들기 (static 정적파일) (0) | 2019.12.10 |
3.Django 블로그만들기 ( detail 페이지) (1) | 2019.12.02 |
1.Django로 블로그 만들기 (0) | 2019.11.28 |