코딩공부/Python Django

[django 실습]게시판 만들기 - 글 수정 기능 만들기

integerJI 2020. 2. 22. 08:34

[django] python django 게시판 만들기 - 글 수정 기능 만들기


model, admin 설정 : https://integer-ji.tistory.com/89

views에 데이터 가져오기 : https://integer-ji.tistory.com/90

detail page 만들기 : https://integer-ji.tistory.com/91

setting 설정, 데이터 자르기, 정렬하기 : https://integer-ji.tistory.com/93

getbootstrap으로 홈페이지 꾸미기 : https://integer-ji.tistory.com/94

템플릿 상속, url 관리하기 : https://integer-ji.tistory.com/95

디자인 쪼끔 수정 : https://integer-ji.tistory.com/97

글 쓰기 기능 만들기 : https://integer-ji.tistory.com/99


언제나 시작은 가상 환경 실행, 디렉터리 이동

source myvenv/Scripts/activate

cd crudproject/

 

 

새로운 페이지.html 생성하는 방법

html을 만들면 해야할것 3가지


1. templates 폴더 안에 html파일 만들기


2. views.py에 함수 설정하기


3. urls.py url 만들기

 

 

crudapp/templates/update.html 만들기

{% extends 'base.html' %}

{% block content %}

<br>
<div class="container">
	<form method="POST">
	  {% csrf_token %}
	  <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>
</div>

{% endblock %}

 

내용은 create.html의 내용을 복사해 줍니다.

 

이번엔 다른 방법으로 수정을 해봅시다.

 

form의 method를 POST로 설정합니다.

 

POST방식으로 전송하기 위해 {% csrf_token %}를 설정합니다.

( 보내는 문자를 보안하는 코드 )

 

이제 submit가 눌리면 POST방식으로 form이 실행됩니다.

 

 

views.py update 함수 설정

from django.utils import timezone

def update(request, blog_id):
    blog = Blog.objects.get(id=blog_id)

    if request.method == "POST":
        blog.title = request.POST['title']
        blog.body = request.POST['body']
        blog.pub_date = timezone.datetime.now()
        blog.save()
        return redirect('/crudapp/detail/' + str(blog.id))

    else:
        return render(request, 'update.html')

 

기존 postcreate는 글쓰기를 만들기 위한 create 함수와

 

글 내용을 등록하는 postcreate 함수 두 개를 만들어 줬습니다.

 

update도 수정할 페이지 함수와 글을 저장할 함수 두 개를 만들 수 있지만

 

GET 방식과 POST 방식을 이용해 하나의 함수로 두 가지 기능을 만들 수 있습니다.

 

만약에 request.method가 POST라면

 

글을 수정하여 저장을 하고

 

else일 경우에는 update.html을 띄워줍니다.

 

 

crudapp/urls.py url 설정하기

from django.urls import path
from . import views

urlpatterns = [
    path('new/', views.new, name='new'),
    path('detail/<int:blog_id>/', views.detail, name='detail'),
    path('create/', views.create, name='create'),
    path('postcreate/', views.postcreate, name='postcreate'),
    path('update/<int:blog_id>/', views.update, name='update'),
]

 

수정하기 페이지를 진입하기 위한 update url 생성

 

수정할때와 수정한 내용을 저장하기 위해 해당 blog_id가 필요함으로 같이 받아줍니다.

 

 

확인

 

blog.id가 25번째인 글이 있습니다.

 

수정하기를 누르면

 

 

crudapp/update/25의 update.html로 넘어갑니다.

 

 

내용을 입력 후 글을 수정해 보면 25번째 글 그대로 글이 수정된 모습을 볼 수 있습니다.

 

 

git push

git init

git add .

git commit -m "코멘트"

 

git push origin master

 

 

 - 끝 -

 

---

 

하지만 기존의 글을 수정 페이지에 가져오고 싶다면??

 

https://integer-ji.tistory.com/102

 

참고하시면 됩니다!