카테고리 없음
Vuejs와 Django의 CRUD 중 C (todo list를 사용)
MC류짱
2022. 11. 10. 15:34
장고 서버와 뷰 서버를 둘 다 실행 시켜준다.
- 장고 프로젝트 폴더와, 뷰 프로젝트 폴더를 각자 vscode로 실행시켜 서버를 실행
장고 서버에서 api요청 해서 모델(DB)가져오기
- 자 이제 뷰로 실행시킨 서버에서 장고로 axios를 통해 필요한 데이터를 가져와야 한다.
- 하지만, 브라우저에서 다른 포트라고 판단하여 못가져오게 한다.
- 자세한 내용은 mdn cors 검색하여 문서를 읽어보도록..
- 일단, 막아놓은 것을 뚫어야 한다.
https://pypi.org/project/django-cors-headers/
django-cors-headers
django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS).
pypi.org
- 문서 읽어보고 적용시킨다.
뷰 설치 항목
- 1. vuex
- vue add vuex
- 2. router
- vue add router
App.vue
- 데이터는 vuex로 관리 할 것이기 때문에 App에는 링크만 적어줌
src/views/TodoList.vue
- vuex 헬퍼 메서드를 사용하여 store/index.js에 접근한다.
- 일단, store/index.js의 state에는 todo에 있는 배열을 사용하기 위해 computed에 함수를 적어준다.
- store/index.js의 state에는 todo를 저장할 빈 배열이 있다.
- 이제, 장고 서버에 api요청을 보내 todo리스트를 가져와야한다.
- 이때 가져오는 코드는 created를 사용해 생성시 바로 가져오게 한다.
- 다음 이미지 참고
store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
import router from '@/router'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
todos: [],
},
getters: {
},
mutations: {
SET_TODOS(state, todos) {
state.todos = todos
},
CREATE_TODO(state, todo) {
state.todos.push(todo)
// console.log(state.todos);
// router.push('/')
router.push({name: 'index'})
},
},
actions: {
createTodo(context, todoTitle) {
axios({
method: 'post',
url: "http://127.0.0.1:8000/todos/",
data: {
title: todoTitle,
is_completed: false,
},
})
.then((res) => {
// console.log(res)
context.commit('CREATE_TODO', res.data)
})
},
getTodos({commit}) {
axios({
url: "http://127.0.0.1:8000/todos/",
})
.then((res) => {
// console.log(res);
commit('SET_TODOS', res.data)
})
},
},
modules: {
}
})
- 코드의 양이 많지만, 기능은 간단하다.
- 일단, actions의 getTodos함수는 장고 서버로 axios요청을 보낸다.
- 이때, .then(res)의 받아온 값의 data가 우리가 받아와야할 정보가 들어있다.
- state의 데이터 직접 접근하는건 mutations에서 한다.
- res.data를 mutations의 SET_TODOS로 넘겨주고, 거기서 state의 배열에 객체로 된 res.data(todo 리스트)를 push 한다.
- (현재 장고 서버엔 5개의 todo리스트가 있다.)
- 다른 함수도 기본적으로 비슷한 로직이다.
- 할일을 생성할 때에는 장고 서버에 post요청을 보내면 된다.
CreateTodo.vue
- 여기선 할 일을 만든다.
- 넘겨주는 함수와 작동 기능은 위의 index.js에서 확인해 보길..