DAY 3 Django

김의석 ·2024년 1월 1일

Django

목록 보기
3/39

DELETE

  • 동작정의 : 상세보기 페이지에 접속하면 delete 링크가 생성된다. delete 버튼을 클릭하면 상세페이지가 삭제되고 home으로 이동하게된다.
 contextUI = '' # 맥락에 따라(context) UI 출력되게 하기위함
    if id != None:
        contextUI = f'''
            <li> 
                <form action="/delete/" method="post">
                    <input type="hidden" name="id" value={id}>
                    <input type="submit" value="delete">
                </form>
            </li>
            <li><a href="/update/{id}">update</a></li>
        '''
  • 조건식(if id != None:)은 맥락에 따라(context) Delete UI 출력되게 하기위함
  • delete는 server의 수정임으로 form 태그에서 method='post'로 지정한다.
  • 삭제할 id를 지정하면서 값을 숨겨 요청을 보내기 위해 input type="hidden" 설정
def delete(request):
    global topics
    if request.method == 'POST': # 1.요청이 post 방식으로 들어왔는지 확인.
        id = request.POST['id']  # 2.POST 요청에서 전달한 id값이 들어왔는지 확인
        newTopics = []
        for topic in topics:
            if topic['id'] != int(id):
                newTopics.append(topic)
        topics = newTopics
        return redirect('/')
  • request.method == 'POST'로 요청이 POST방식으로 들어왔는지 확인
  • id = requset.POST['id']로 form 태그에서 POST 요청으로 전달한 id 값이 들어 왔는지 확인.
  • for문을 이용하여 삭제할 id를 제외한 나머지 id를 newTopics로 분류하고 newTopics를 global topics에 재선언
  • 삭제가 완료되면 redirect로 index로 url 연결

UPDATE

  • 동작정의
    홈에서 상세페이지로 접속하면 update 링크가 생성된다.
    update 버튼을 클릭하면 상세보기의 작성 form이 출력된다.
    이때 form 내에는 기존의 title과 body가 작성되어있는 상태.
    기존의 title과 body를 수정하고 제출 버튼을 클릭하여 서버에 전송하면 내용이 수정된다.
    동시에 수정된 상세페이지로 이동한다.
def update(request, id):
    global topics
    if request.method == 'GET':
        for topic in topics:
            if topic['id'] == int(id):
                selectedTopic  = {
                    "title":topic['title'],
                    "body":topic['body']
                }   
        article = f'''
            <form action="/update/{id}/" method= "post">
                <p><input type="text" name="title" placeholder="title" value={selectedTopic['title']}></p>
                <p><textarea name="body" placeholder ="body">{selectedTopic['body']}</textarea></p>
                # text area에서 상세보기의 body 내용을 띄우려면 직접 태그 내 context로 입력해야 한다. 
                <p><input type="submit"></p>
            </form>
        '''
        return(HttpResponse(HTMLTemplete(article)))
  • for문을 이용하여 현재 수정할 id의 title과 body를 selectedTopic에 dictionary로 선언한다.
  • form 태그 내에서 기존의 title과 body 가져와야함으로 각각 selectedTopic['title']과 {selectedTopic['body']로 기존의 값을 출력
  • 수정 후 submit으로 수정 내용 POST 요청
 elif request.method == 'POST':
        title = request.POST['title']
        body = request.POST['body']
        for topic in topics:
            if topic['id'] == int(id):
                topic['title'] = title # 기존의 title : topic['title'] / 수정한 titile : update 함수 내 title
                topic['body'] = body   # 기존의 body : topic['body'] / 수정한 body : update 함수 내 body
        return redirect(f'/read/{id}')
  • 수정 내용이 담긴 request.POST['title'], request.POST['body']를 새롭게 title,body로 재선언.
  • for문을 통해 glob topic에서 기존의 title과 body 값을 update 함수 내 title과 body로 재선언
  • redirect로 수정한 id의 url로 이동
profile
널리 이롭게

0개의 댓글