설치
기존 프로젝트에서 axios로 서버와 통신 하기 위해서는 이를 node_modules에 설치해야한다. 이때 다음과 같은 명령어를 사용하면 된다.
npm install axios
이후 /node_modules에 axios가 추가된 것을 확인할 수 있다.
vue 에서 사용 시 import axios from "axios"를 해야 한다.
- static안에 있는 파일은 vue에서 배포 받은걸 저장한 파일이다.
daoemp.py
import pymysql
class DaoEmp:
def __init__(self):
self.con = pymysql.connect(host='127.0.0.1', port= 3305, user='root', password='python',
db='python', charset='utf8')
self.cur = self.con.cursor(pymysql.cursors.DictCursor)
def selectList(self):
sql = "SELECT * FROM emp"
self.cur.execute(sql)
list = self.cur.fetchall()
return list
def selectOne(self,e_id):
sql = f"""
SELECT
e_id,e_name,gen,addr
FROM
emp
WHERE
e_id = '{e_id}'
"""
print(sql)
self.cur.execute(sql)
vo = self.cur.fetchone()
return vo
def __del__(self):
self.cur.close()
self.con.close()
def insert(self,e_id,e_name,gen,addr):
sql = f"""
INSERT INTO emp
(e_id,e_name,gen,addr)
VALUES
('{e_id}','{e_name}','{gen}','{addr}')
"""
print(sql)
cnt = self.cur.execute(sql)
self.con.commit()
return cnt
def update(self,e_id,e_name,gen,addr):
sql = f"""
UPDATE emp
SET
e_name='{e_name}',
gen='{gen}',
addr='{addr}'
WHERE
e_id = '{e_id}'
"""
print(sql)
cnt = self.cur.execute(sql)
self.con.commit()
return cnt
def delete(self,e_id):
sql = f"""
DELETE FROM emp
WHERE
e_id='{e_id}'
"""
print(sql)
cnt = self.cur.execute(sql)
self.con.commit()
return cnt
# if __name__ == '__main__':
# de = DaoEmp()
# vo = de.selectOne('1')
# print("vo",vo)
if __name__ == '__main__':
de = DaoEmp()
cnt = de.insert('4','4','4','4')
print("cnt",cnt)
myflask.py
from flask import Flask,redirect,json
from flask.globals import request
from flask.templating import render_template
from flask.json import jsonify
from day15server.daoemp import DaoEmp
from flask_cors.extension import CORS
app = Flask(__name__, static_url_path="", static_folder="static")
CORS(app)
@app.route("/")
def main():
return redirect("/index.html")
@app.route('/axios.ajax',methods=['POST','GET'])
def ajax_axios():
menu=request.get_json()
return jsonify({'message':'ok'})
@app.route('/emp_list.ajax', methods=['POST','GET'])
def ajax_emp_list():
de = DaoEmp()
list = de.selectList()
return jsonify({'list':list})
@app.route('/emp_one.ajax', methods=['POST'])
def ajax_emp_one():
data = request.get_json()
e_id = data['e_id']
de = DaoEmp()
vo= de.selectOne(e_id)
return jsonify({'vo':vo})
@app.route('/emp_add.ajax', methods=['POST'])
def ajax_emp_add():
data = request.get_json()
e_id = data['param']['e_id']
e_name = data['param']['e_name']
gen = data['param']['gen']
addr = data['param']['addr']
de = DaoEmp()
cnt = de.insert(e_id, e_name, gen, addr)
return jsonify({'cnt':cnt})
@app.route('/emp_mod.ajax', methods=['POST'])
def ajax_emp_mod():
data = request.get_json()
e_id = data['param']['e_id']
e_name = data['param']['e_name']
gen = data['param']['gen']
addr = data['param']['addr']
de = DaoEmp()
cnt = de.update(e_id, e_name, gen, addr)
return jsonify({'cnt':cnt})
@app.route('/emp_del.ajax', methods=['POST'])
def ajax_emp_del():
data = request.get_json()
e_id = data['param']['e_id']
de = DaoEmp()
cnt = de.delete(e_id)
return jsonify({'cnt':cnt})
if __name__ == "__main__":
app.run(host="0.0.0.0",debug=True, port=80)
Emp.vue
<script setup>
import {onMounted, reactive} from 'vue'
import axios from "axios";
let list = reactive([
]);
function fn_list(){
//emp_list.ajax
axios.post('http://localhost/emp_list.ajax', {
}).then(function (resp) {
console.log(resp.data.list);
list.splice(0);
let mylist = resp.data.list;
for(let i=0; i<mylist.length; i++){
//let vo = list[i];
list.push(mylist[i]);
}
})
}
function fn_one(e){
//emp.one.ajax
let e_id = e.target.text;
axios.post('http://localhost/emp_one.ajax', {
'e_id' : e_id
}).then(function (resp) {
let vo = resp.data.vo;
document.querySelector("#e_id").value = vo.e_id;
document.querySelector("#e_name").value = vo.e_name;
document.querySelector("#gen").value = vo.gen;
document.querySelector("#addr").value = vo.addr;
console.log(resp.data.vo);
})
}
function fn_add(){
//emp_add.ajax
let param = {
'e_id':document.querySelector("#e_id").value,
'e_name':document.querySelector("#e_name").value,
'gen':document.querySelector("#gen").value,
'addr':document.querySelector("#addr").value
}
axios.post('http://localhost/emp_add.ajax', {
'param' : param
}).then(function (resp) {
var cnt = resp.data.cnt;
if(cnt ==1){
alert("정상적으로 추가되었습니다.");
fn_list();
document.querySelector("#e_id").value="",
document.querySelector("#e_name").value="",
document.querySelector("#gen").value="",
document.querySelector("#addr").value=""
}else {
alert("추가 도중 문제가 발생했습니다.")
}
})
}
function fn_mod(){
//emp_mod.ajax
let param = {
'e_id':document.querySelector("#e_id").value,
'e_name':document.querySelector("#e_name").value,
'gen':document.querySelector("#gen").value,
'addr':document.querySelector("#addr").value
}
axios.post('http://localhost/emp_mod.ajax', {
'param' : param
}).then(function (resp) {
var cnt = resp.data.cnt;
if(cnt ==1){
alert("정상적으로 수정되었습니다.");
fn_list();
document.querySelector("#e_id").value="",
document.querySelector("#e_name").value="",
document.querySelector("#gen").value="",
document.querySelector("#addr").value=""
}else {
alert("수정 도중 문제가 발생했습니다.")
}
})
}
function fn_del(){
//emp_del.ajax
var flag = confirm("한번 지워진 데이터는 복구 불가. 그래도 지우실겁니까?")
if(!flag) {
return;
}
let param = {
'e_id':document.querySelector("#e_id").value,
}
axios.post('http://localhost/emp_del.ajax', {
'param' : param
}).then(function (resp) {
var cnt = resp.data.cnt;
if(cnt ==1){
alert("정상적으로 삭제되었습니다.");
fn_list();
document.querySelector("#e_id").value="",
document.querySelector("#e_name").value="",
document.querySelector("#gen").value="",
document.querySelector("#addr").value=""
}else {
alert("삭제 도중 문제가 발생했습니다.")
}
})
}
onMounted(()=>{
fn_list();
})
</script>
<template>
<table border="1">
<thead>
<tr>
<th>사번</th>
<th>이름</th>
<th>성별</th>
<th>주소</th>
</tr>
</thead>
<tbody>
<tr v-for="e in list">
<td><a @click="fn_one($event)">{{e.e_id}}</a></td>
<td>{{e.e_name}}</td>
<td>{{e.gen}}</td>
<td>{{e.addr}}</td>
</tr>
</tbody>
</table>
<table border="1">
<tr>
<td>사번</td>
<td>
<input type="text" id="e_id">
</td>
</tr>
<tr>
<td>이름</td>
<td>
<input type="text" id="e_name">
</td>
</tr>
<tr>
<td>성별</td>
<td>
<input type="text" id="gen">
</td>
</tr>
<tr>
<td>주소</td>
<td>
<input type="text" id="addr">
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="추가" @click="fn_add"/>
<input type="button" value="수정" @click="fn_mod"/>
<input type="button" value="삭제" @click="fn_del"/>
</td>
</tr>
</table>
</template>
<style scoped>
</style>
'파이썬 > 수업내용' 카테고리의 다른 글
[Python] React (0) | 2024.07.17 |
---|---|
[Python] Svelte - MVVM 패턴 으로 CRUD (0) | 2024.07.16 |
[python] Svelte-CRUD (0) | 2024.07.15 |
[Pytho] Svelte (1) | 2024.07.15 |
[Python] Vue.js (0) | 2024.07.15 |