[Django, Vue]Django + Vue CRUD 구현 4 - Front end

2021. 3. 5. 19:05·SW개발/Django

 

이전 포스팅에서 Create 기능에 대한 부분을 완벽하게 구현해 두었다. 지금부터는 Delete 기능을 구현해볼 것이다.

 

Content.vue

// Content.vue 수정

<template>
    <div>
        <!-- 변경 -->
        <v-container fluid>
            <!-- 전체 너비를 사용 : fluid -->
            <v-layout column>
                <v-flex>
                    <h3 class="subject">user CRUD</h3>
                </v-flex>
                <v-flex column>
                    <v-row>
                        <v-col cols="4" md="4">
                            <!-- 합이 12인 전체화면 -->
                            <v-text-field v-model="data.usename" :counter="15" label="Username" required></v-text-field>
                        </v-col>
                        <v-col cols="4" md="4">
                            <v-text-field v-model="data.age" label="Age" required></v-text-field>
                        </v-col>
                        <v-col cols="4" md="4">
                            <v-text-field v-model="data.city" :counter="15" label="City" required></v-text-field>
                        </v-col>
                    </v-row>
                    <v-btn @click="sendForm" style="background: green">create</v-btn>
                    <v-btn @click="clearForm" style="background: red">clear</v-btn>
                </v-flex>
                <!-- 변경 -->
 
                <v-flex class="userList" column>
                    <v-card max-width="600" tile>
                        <v-list-item v-for="(data, index) in propsdata" v-bind:key="index">
                            <v-list-item-content>
                                <v-list-item-title>이름 : {{ data.username }}</v-list-item-title>
                                <v-list-item-subtitle>나이 : {{ data.age }}세, 거주지: {{ data.city }}</v-list-item-subtitle>
                            </v-list-item-content>
                            <!-- 추가되는 코드 -->
                            <v-btn class="ma-2" @click="deleteUser(data.id)" color="#F44336">Delete</v-btn>
                        </v-list-item>
                    </v-card>
                </v-flex>
            </v-layout>
        </v-container>
    </div>
</template>

methods: {
        sendForm: function() {
            axios({
                method: "POST",
                url: url,
                data: this.data,
            })
                .then((response) => {
                    this.userList = response.data;
                })
                .catch((error) => {
                    console.log("Failed to get userList", error.response);
                });
        },
        clearForm: function() {
            (this.data.username = ""), (this.data.age = ""), (this.data.city = "");
        },
        // 추가되는 코드
        deleteUser: function(id) {
            axios({
                method: "DELETE",
                url: url + id + "/", // localhost:8000/user/1 로 delete method
            })
                .then((response) => {
                    this.$emit("deleted"); // 상위 컴포넌트에 deleted 이벤트를 전송함
                    console.log("Success", response);
                })
                .catch((error) => {
                    console.log("Failed to get userList", error.response);
                });
        },
    },

Content.vue 파일에서 deleteUser 라는 함수를 새로 만들어 DELETE 요청을 axios 를 활용해 진행할 것이다.

deleteUser 함수에서는 http method 를 Delete 로 설정하고 user의 id 값과 함께 url 요청을 하도록 한다.

또한 상위 컴포넌트에 deleted 라는 이벤트를 전송함으로써 삭제 후 자동으로 새로고침된 데이터를 GET 할 수 있도록 한다.

 

App.vue

// App.vue 수정

<template>
    <div>
        <header></header>
        <!-- 수정하는 부분 -->
        <content v-bind:propsdata="userList" v-on:saved="getUserList" v-on:deleted="getUserList"></content>
        <!-- v-bind:하위컴포넌트 속성명="상위 컴포넌트 전달할 데이터명"  -->
        <footer></footer>
    </div>
</template>

content.vue 에서 deleted 이벤트를 전송 받을 때 이전에 만들어 두었던 getUserList 메소드를 다시 한번 이용하여 삭제 시에도
데이터가 바로 갱신되도록 설정하였다.

위의 작업을 하고 나면 정상적으로 DELETE 기능을 이용할 수 있게 된다.

 

정상 작동하는 Delete

 

다음 포스팅에서는 CRUD 기능중 마지막인 Update 기능을 구현해볼 것이다.

 

728x90

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

[Django]Django REST Framework 튜토리얼 (Quickstart)  (0) 2021.03.07
[Django, Vue]Django + Vue CRUD 구현 5 - Front end  (0) 2021.03.05
[Django, Vue]Django + Vue CRUD 구현 3 - Front end  (0) 2021.03.04
[Django, Vue]Django + Vue CRUD 구현 2 - Front end  (0) 2021.03.03
[Django, Vue]Django + Vue CRUD 구현 1 - Front end  (0) 2021.03.02
'SW개발/Django' 카테고리의 다른 글
  • [Django]Django REST Framework 튜토리얼 (Quickstart)
  • [Django, Vue]Django + Vue CRUD 구현 5 - Front end
  • [Django, Vue]Django + Vue CRUD 구현 3 - Front end
  • [Django, Vue]Django + Vue CRUD 구현 2 - Front end
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컨트리뷰터
    g
    트리 #AVL #알고리즘 #자료구조
    어플리케이션
    플레이스토어
    라이프 스타일
    오픈소스
    음식
    배공파용
    Contributor
    배달비 공유
    배달
    django
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[Django, Vue]Django + Vue CRUD 구현 4 - Front end
상단으로

티스토리툴바