본문 바로가기

Django

django10 - ajax

 

 

urls.py

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path("admin/", admin.site.urls),
    
    path('', views.indexFunc),
    path('startajax', views.Func1),
    path('goajax', views.Func2),
]

 

 

views.py

from django.shortcuts import render
import time
import json
from django.http.response import HttpResponseRedirect, HttpResponse

# Create your views here.

lan = {
    'id':123,
    'name':'파이썬',
    'history':[
        {'date':'2022-9-20', 'exam':'basic'},
        {'date':'2022-10-20', 'exam':'django'},        
    ] 
}

def testFunc():
    print(type(lan))    #  <class 'dict'>
    
    # JSON 인코딩 : Python Object(dict, list, tuple...)를 JSON 문자열로 변경
    # indent=4 는 가독성을 높인다
    # jsonString = json.dumps(lan)
    jsonString = json.dumps(lan, indent=4)
    print(jsonString)
    print(type(jsonString))  #  <class 'str'>
    
    # JSON 디코딩 : JSON 문자열을 Python Object(dict, list, tuple...)로 변경
    dic = json.loads(jsonString)
    print(type(dic))
    print(dic)
    print(dic['name'])

def indexFunc(request):
    testFunc()
    return render(request, 'abc.html')


def Func1(request):
    msg = request.GET.get('msg')
    msg = "nice " + msg
    print(msg)
    context = {'key':msg}
    time.sleep(10);
    return HttpResponse(json.dumps(context), content_type="application/json")

def Func2(request):
    datas = [
        {'irum':'홍길동','nai':22},
        {'irum':'고길동','nai':32},
        {'irum':'신길동','nai':42}
    ]
    
    return HttpResponse(json.dumps(datas), content_type="application/json")

 

 

abc.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
let xhr;

window.onload = function(){
	document.querySelector("#btn1").addEventListener("click", ()=>{
		// alert('a');
		// XMLHttpRequest 객체로 웹서버와 통신
		xhr = new XMLHttpRequest();
		// console.log(xhr);
		
		xhr.onreadystatechange = function(){
			// alert(xhr.readyState);   // 0 ~ 4 값을 갖는다.
			// 통신 상태가 이상이 없다는 뜻
			if (xhr.readyState === XMLHttpRequest.DONE){
				// alert(xhr.status);
				if(xhr.status === 200){
					// console.log(xhr.response);
					process1();
				}
			}
		}
		
		url = "startajax?msg=" + document.querySelector("#txtMsg").value;
		xhr.open("GET", url, true);  // true 비동기   false 동기
		xhr.send();
	});
	
	document.querySelector("#btn2").onclick = function(){
		xhr = new XMLHttpRequest();
		xhr.onreadystatechange = function(){
			if (xhr.readyState === XMLHttpRequest.DONE){
				if(xhr.status === 200){
					process2();
				}
			}
		}
		xhr.open("GET", "goajax", true); 
		xhr.send();
	}
}

function process1(){
	// alert(xhr.responseText)
	let parseData = JSON.parse(xhr.responseText)
	document.querySelector("#showData1").innerText = xhr.responseText;
}

function process2(){
	// alert(xhr.responseText);
	let parseData2 = JSON.parse(xhr.responseText)
	let str = "";
	for(let i=0; i < parseData2.length; i++){
		str += parseData2[i].irum + " " + parseData2[i].nai + "<br>";
	}
	document.querySelector("#showData2").innerHTML = str;
}

</script>
</head>
<body>
Ajax 연습<p/>
<textarea cols="50" rows="5"></textarea>
<br>
자료 입력 : <input type="text" id="txtMsg" value="korea"/>
<button id = "btn1">Ajax test1</button>
<br>
<div id = "showData1"></div>
<hr>
<button id="btn2">Ajax test2</button>
<div id = "showData2"></div>

</body>
</html>

'Django' 카테고리의 다른 글

django11 - ajax, db  (0) 2022.10.20
고객 정보 찾기 예제  (0) 2022.10.19
django9 - DB, 게시판, 댓글  (0) 2022.10.19
django project 과정 정리  (0) 2022.10.18
django8 - DB, 표, CRUD, 페이징  (0) 2022.10.18