개발일지/Django

Django_CRUD_Update

2022. 7. 13. 23:34
728x90

마지막으로 Update 기능을 구현해보자.

 

delete버튼처럼 상세보기 페이지(read)로 들어가면 update버튼이 나타나고

이를 클릭하면 수정하는 창이 생긴다. 그 창에는 기존 정보들이 들어있고

제출을 클릭하면 수정한 정보로 바뀌며 해당 상세보기페이지로 간다.

 

가장 복잡하긴 하지만 이전에 공부한 CRD를 잘 활용하면 충분히 만들 수 있다.

 

 

 

먼저 상세보기페이지로 접속했을 때, 버튼이 생성되게 해 보자

delete_btn = ''
    if id != None:
        delete_btn = f'''
        <li><a href="/update/{id}">update</a></li> # 기존에 만들어 두었던 delete버튼에 추가
        <li>                                       # 글 수정을 위해 id값을 가지고 접속한다
            <form action="/delete/" method="POST">
                <input type="hidden" name="id" value={id}>
                <input type="submit" value="delete">
            </form>
        </li>
        '''

 

뭔가 delete_btn이라는 이름이 마음에 안 드니 이름도 바꿔주었다

(delete_btn이라는 이름을 3번 사용했음 아래 코드에 2개, html본체에 1개 더 있음)

mybtn = ''
    if id != None:
        mybtn = f'''
        <li><a href="/update/{id}">update</a></li>
        <li>
            <form action="/delete/" method="POST">
                <input type="hidden" name="id" value={id}>
                <input type="submit" value="delete">
            </form>
        </li>
        '''

 

저장 후 실행해보면 버튼이 잘 생성되었고

버튼을 눌러보면 에러가 발생하기는 하나 id값을 가지고 잘 넘어오는 것을 볼 수 있다.

 

이제 myapp의 urls.py에서 서버 작업을 해주자

서버로 넘어가서 update함수로 위임해 주었다

urlpatterns = [
    path('', views.index),
    path('create/', views.create),
    path('read/<id>/', views.read),
    path('update/<id>/', views.update), # 서버는 read와 구조가 동일
    path('delete/', views.delete)
]

 

 

이제 update 함수를 구현해보자

 

update버튼을 클릭하면 update창이 생기고 ( GET )

제출 버튼을 누르면 정보가 수정된다. ( POST )

 

구조가 create와 비슷한 것 같아 보인다.

 

create를 그대로 가져와 몇 가지만 수정하면 될 것 같다.

 

먼저 GET부분부터 구현해보자

@csrf_exempt  # POST 구현할 때 필요, 그냥 미리 가져옴
def update(request, id): # 어떤 정보를 수정할지 판단해야하므로 id값 필요
    global topics # 수정할 정보를 input칸과 textarea칸에 찍어줄때 하므로 전역변수 선언
    if request.method == "GET":
        for topic in topics:           # for문과 if문을 통해 해당 id의 정보를 찾는다.
            if topic["id"] == int(id):
                title = topic["title"]
                body = topic["body"]
                article = f'''
                <form action="/update/{id}/" method="POST"> # create와 차이점 id값을 가져가야함
                    <p><input type="text" name="title" placeholder="title" value="{title}"></p>
                    <p><textarea placeholder="body" name="body">{body}</textarea></p>
                    <p><input type="submit"></p>
                </form>     # input에는 value값으로 title을 주고, textarea는 칸 안에 body를 주어
                '''         # update를 눌렀을 때 해당정보가 표시되게한다.
                return HttpResponse(HTMLTemplate(article, id))

 

다음은 POST

elif request.method == "POST":
    title = request.POST["title"]          # GET창에서 POST로 전송한 데이터를 받는다
    body = request.POST["body"]
    for topic in topics:                   # for문과 if문을 통해 일치하는 id값을 찾는다
        if topic["id"] == int(id):
            topic["title"] = title         # 일치한 id값의 데이터들을 변경해준다.
            topic["body"] = body
            return redirect(f'/read/{id}') # 수정후 해당 상세보기페이지로 돌아간다

 

실행해보면

잘 되는 것을 볼 수 있다.

 

 

Youtube 생활코딩님의 수업 영상을 보고 복습을 위해 작성한 글입니다.
728x90
저작자표시 비영리 변경금지 (새창열림)

'개발일지 > Django' 카테고리의 다른 글

Django_CRUD_Delete  (0) 2022.07.13
Django_CRUD_Create  (0) 2022.07.13
Django_CRUD_Read  (0) 2022.07.12
Django - app, Routing  (0) 2022.07.11
Django  (0) 2022.07.11
'개발일지/Django' 카테고리의 다른 글
  • Django_CRUD_Delete
  • Django_CRUD_Create
  • Django_CRUD_Read
  • Django - app, Routing
E-room
E-room
나의 성취 기록들
E-room
E-room Achievement Logs
E-room
전체
오늘
어제
  • 분류 전체보기
    • 개발일지
      • 돌픽
      • Spring
      • Algorithm
      • Java
      • Node.js
      • Python
      • DataBase
      • 웹개발
      • JavaScript
      • 컴퓨터지식
      • Django
    • 이것저것
    • 피드백 감사히 받겠습니다

블로그 메뉴

  • 태그
  • Github
  • 돌픽-이상형월드컵

인기 글

최근 글

최근 댓글

태그

  • 자료구조
  • 탐색
  • dp
  • 순열
  • Django
  • search
  • 백트래킹
  • 파이썬
  • Spring
  • 스파르타코딩클럽
  • API
  • 재귀
  • algorithm
  • 완전탐색
  • javascript
  • Java
  • 알고리즘
  • 조합
  • python
  • 자바
  • 수열
  • JPA
  • 백준
  • 다이나믹
  • boot
  • 생활코딩
  • 프로그래밍
  • SQL
  • mysql
  • dfs

공지사항

hELLO · Designed By 정상우.
E-room
Django_CRUD_Update
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.