< 요약 >

 

admin페이지에서 글쓰기 하지 말고, 글쓰는 페이지 만듭시다.

 

  1. template 만들기 ( 게시글 등록 화면 만들기)
  2. View 만들기 & url설정하기 & template에 링크 넣기
  3. 제출하기 버튼 작동하게 하기

  4. 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

 

 

http://127.0.0.1:8000/new/

다음 주소로 입력했을때 화면이 잘 보이는 지 확인한 모습이다. 

 

 

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에서 템플릿함수를 쓰고 싶을때 씀

 

+ Recent posts