22.09.13. 오전 python 수업

2022. 9. 13. 20:11카테고리 없음

비동기로 emp 홈페이지 만들기

  1. 첫 화면에 emp table의 list를 table로 출력할 것
  2. 하단의 빈 칸을 채운 뒤 '추가'를 누르면 insert가 될 것
    - 성공 시 다시 빈 칸으로 만들 것. 실패 시에는 유지.
  3. 상단 table의 사번을 클릭할 경우 하단의 표에 해당 사번의 정보가 빈 칸에 입력될 것.
  4. 3의 정보 중 사번을 제외한 다른 정보를 수정한 뒤 '수정' 버튼을 누를 경우 update 될 것.
  5. 3의 정보가 보여진 상태에서 '삭제' 버튼을 누를 경우 delete 될 것.

*emp.html*

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>Insert title here</title><script src="static/js/jquery-3.6.1.js"></script>
<script type="text/javascript">
	function mydelete(){
		var param={
			e_id : e_id.value
		}
		$.ajax({
	        type: "POST", //요청 메소드 방식
	        url:"emp_delete.ajax",
	        data: param,
	        dataType:"json", //서버가 요청 URL을 통해서 응답하는 내용의 타입
	        success : function(data){
	        	console.log(param);
	        	if(data.res==1){
	        		alert('성공');
	        		e_id.value="",
					e_name.value="",
					sex.value="",
					addr.value=""
	        	}else if(data.res!=1){
	        		alert('실패');
	        	}
	        	console.log(data);
	        	myselects();
	        }
	    });
		
	}
	function myupdate(){
		var param={
			e_id:e_id.value,
			e_name: e_name.value,
			sex: sex.value,
			addr: addr.value
		}
		$.ajax({
	        type: "POST", //요청 메소드 방식
	        url:"emp_update.ajax",
	        data:param,
	        dataType:"json", //서버가 요청 URL을 통해서 응답하는 내용의 타입
	        success : function(data){
	        	console.log(param);
	        	if(data.res==1){
	        		alert('성공');
	        		e_id.value="",
					e_name.value="",
					sex.value="",
					addr.value=""
	        	}else if(data.res!=1){
	        		alert('실패');
	        	}
	        	console.log(data);
	        	myselects();
	        }
	    });
	}
	function myinsert(){
		var param={
			e_id:e_id.value,
			e_name: e_name.value,
			sex: sex.value,
			addr: addr.value
		}
		$.ajax({
	        type: "POST", //요청 메소드 방식
	        url:"emp_insert.ajax",
	        data:param,
	        dataType:"json", //서버가 요청 URL을 통해서 응답하는 내용의 타입
	        success : function(data){
	        	console.log(param);
	        	if(data.res==1){
	        		alert('성공');
	        		e_id.value="",
					e_name.value="",
					sex.value="",
					addr.value=""
	        	}else if(data.res!=1){
	        		alert('실패');
	        	}
	        	console.log(data);
	        	myselects();
	        }
		});
	}
   function myselects() {
      $.ajax({
        type: "GET", //요청 메소드 방식
        url:"emp_list.ajax",
        dataType:"json", //서버가 요청 URL을 통해서 응답하는 내용의 타입
        success : function(data){
            var list = data.list;
            var txt="";
            for(var i=0;i<list.length;i++){
            	var e_id=list[i].e_id;
                var e_name=list[i].e_name;
                var sex=list[i].sex;
                var addr=list[i].addr;
            	txt+=`
            		<tr>
            			<td><a href="javascript:myselect('${e_id}')">${e_id}</a></td>
            			<td>${e_name}</td>
            			<td>${sex}</td>
            			<td>${addr}</td>
            		</tr>
            	`;
            }
            if(list.length==0){
            	txt=`
            		<tr>
            			<td colspan='4'>해당하는 데이터가 없습니다.</td>
            		</tr>
            	`;
            }
            $("#mytbody").html(txt);
         },
        
      });

   }
   function myselect(e_id){
	   var param = {e_id: e_id}
	   $.ajax({
	        type: "GET", //요청 메소드 방식
	        url:"emp_detail.ajax",
	        data: param,
	        dataType:"json", //서버가 요청 URL을 통해서 응답하는 내용의 타입
	        success : function(data){
	        	var emp=data.emp;
	        	$("#e_id").val(emp.e_id);
	        	$("#e_name").val(emp.e_name);
	        	$("#sex").val(emp.sex);
	        	$("#addr").val(emp.addr);
	        	console.log(data);
	        }
		});
   }
   
   $(document).ready(function(){
		myselects();
		$("#btn1").bind("click",myinsert)
		$("#btn2").bind("click",myupdate)
		$("#btn3").bind("click",mydelete)
	});
</script>
</head>
<body>
	<table border='1'>
		<thead>
			<tr>
				<td>사번</td>
				<td>이름</td>
				<td>성별</td>
				<td>주소</td>
			</tr>
		</thead>
		<tbody id="mytbody">
			<tr>
				<td colspan='4'>해당하는 데이터가 없습니다.</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="sex"></td>
		</tr>
		<tr>
			<td>주소</td>
			<td><input type="text" id="addr"></td>
		</tr>
		<tr>
			<td colspan='2'>
				<input type="button" id='btn1' value="추가">
				<input type="button" id="btn2" value="수정">
				<input type="button" id="btn3" value="삭제">
			</td>
		</tr>
	</table>		

</body>
</html>

*daoemp.py*

'''
Created on 2022. 9. 5.

@author: PC-02
'''
import pymysql
class DaoEmp:
    def __init__(self):
        self.con = pymysql.connect(host='127.0.0.1', user='root', password='python', db='python', charset='utf8',port=3305)
        self.cur = self.con.cursor(pymysql.cursors.DictCursor)
    
    def mylist(self):
        sql = "select e_id, e_name, sex, addr from emp order by e_id"
        self.cur.execute(sql)
        mylist=self.cur.fetchall()
        return mylist
    
    def myone(self,e_id):
        sql=f"select e_id, e_name, sex, addr from emp where e_id='{e_id}'"
        self.cur.execute(sql)
        emp = self.cur.fetchall()
        return emp[0]
    
    def myinsert(self, e_id, e_name, sex, addr):
        sql=f"insert into emp (e_id, e_name, sex, addr) values({e_id}, {e_name}, {sex}, {addr})"
        try:
            cnt = self.cur.execute(sql)
            self.con.commit()
        except:
            cnt=0
        return cnt
    
    def myupdate(self, e_id, e_name, sex, addr):
        sql=f"update emp set e_name={e_name}, sex={sex}, addr={addr} where e_id={e_id}"
        try:
            cnt = self.cur.execute(sql)
            self.con.commit()
        except:
            cnt=0
        return cnt
    
    def mydelete(self, e_id):
        sql = f"delete from emp where e_id={e_id}"
        cnt = self.cur.execute(sql)
        self.con.commit()
        
        return cnt
        
        
    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de= DaoEmp()
    
    cnt = de.mydelete('4')
    print("cnt",cnt)

*views.py*

from django.http.response import HttpResponse, JsonResponse
from django.shortcuts import render
from SPA_EMP.daoemp import DaoEmp
from django.views.decorators.csrf import csrf_exempt

def emp(request):
    return render(request, "emp.html")

def emp_list_ajax(request):
    de = DaoEmp()
    list = de.mylist()
    context = {
        'list':list,
    }
    return JsonResponse(context)
def emp_detail_ajax(request):
    e_id = request.GET.get('e_id','000')
    de = DaoEmp()
    emp = de.myone(e_id)
    context = {
        'emp':emp,
    }
    return JsonResponse(context)
@csrf_exempt
def emp_insert_ajax(request):
    e_id = request.POST['e_id']
    e_name = request.POST['e_name']
    sex = request.POST['sex']
    addr = request.POST['addr']
    print(e_id, e_name, sex, addr)
    de = DaoEmp()
    res = de.myinsert(e_id, e_name, sex, addr)
    context = {
        'res':res,
    }
    return JsonResponse(context)

@csrf_exempt
def emp_update_ajax(request):
    e_id = request.POST['e_id']
    e_name = request.POST['e_name']
    sex = request.POST['sex']
    addr = request.POST['addr']
    print(e_id, e_name, sex, addr)
    de = DaoEmp()
    res = de.myupdate(e_id, e_name, sex, addr)
    context = {
        'res':res,
    }
    return JsonResponse(context)

@csrf_exempt
def emp_delete_ajax(request):
    e_id = request.POST['e_id']
    print(e_id)
    de = DaoEmp()
    res = de.mydelete(e_id)
    context = {
        'res':res,
    }
    return JsonResponse(context)

*urls.py*

from django.urls import path
from SPA_EMP import views

urlpatterns = [
	path('emp_list.ajax', views.emp_list_ajax),
    path('emp_detail.ajax', views.emp_detail_ajax),
    path('emp_insert.ajax', views.emp_insert_ajax),
    path('emp_update.ajax', views.emp_update_ajax),
    path('emp_delete.ajax', views.emp_delete_ajax),
    
]

+settings.py의 INSTALLED_APPS=[ ] 안에 어플리케이션? 이름 넣어줄 것~


테트리스 만들기 준비~

기준점이 있는 상태에서 방향키를 눌렀을 때, 해당 기준점이 이동되게 만들기. 기준점은 빨간색이 칠해진다.

<html>
<head>
<title>테트리스</title>
<style type="text/css">
	td{
		width: 20px;
		height: 20px;
	}


</style>

<script type="text/javascript">
//수직
var i = 4;
//수평
var j = 3;

function myrender(){
	
	x=document.querySelectorAll('td');
	cnt = (i*10)+j;
	x[cnt].style.backgroundColor='red';
}
window.addEventListener("keydown", function(e){
	console.log(e.keyCode);
	x[cnt].style.backgroundColor='transparent';
	if(e.keyCode==37){
		j=j-1;
	}else if(e.keyCode==38){
		i=i-1;
	}else if(e.keyCode==39){
		j=j+1;
	}else if(e.keyCode==40){
		i=i+1;
	}
	
	myrender();
	
});

</script>
</head>
<body onload='myrender()'>
	
<table border="1px">
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	<tr>
		<td></td><td></td><td></td><td></td><td></td>
		<td></td><td></td><td></td><td></td><td></td>
	</tr>
	
	

</table>


</body>
</html>