1) Ajax - 동기? 비동기?
동기: 앞의 작업이 끝나지 않는다면 다음 작업을 할 수 없다.
비동기: 앞의 작업 상태와 상관없이 다음 동작을 수행할 수 있다.
Ajax는 비동기식 자바스크립트와 XML의 줄임말로 REST API를 손쉽게 구현하기 위해 사용되는 프레임워크이다.
(손쉽게..............?)
- 간단하게 알아보는 Ajax의 형태, Flask와의 사용법
HTML파일 속 Ajax의 형태
$.ajax({
url: '/ajax test', //Ajax로 요청을 보낼 주소를 적음
type: 'GET', //어떤 방법으로 ?
data: {}, //무슨 데이터를 ?
// url, type, data까지가 클라이언트가 서버에 요청하는 부분
success: function(res){ // 데이터 요청 성공 후 실행할 함수
console.log(res)
}
})
/ajax test 주소에 GET 방식으로 데이터를 요청하고, 성공하면 함수를 실행한다.
그리고 아래는 위에 정의된 ajax를 이용하는 flask 코드이다.
from flask import Flask, jsonify
app = Flask(__name__)
# API 기능 정의
@app.route('/ajax_test')
def name():
dict_data = {
"name": "hayan"
}
return jsonify(dict_data)
HTML 파일의 ajax에서 console.log(res) 를 수행하면 {"name":"hayan"} 데이터를 출력한다.
- 간단하게 알아보는 Ajax의 형태, Flask와의 사용법 (2)
HTML파일에는 아래와 같이 ajax가 구현되어 있다.
ajax() 메소드 내 data 변수에 request를 이용해 전달된 데이터를 json 형태로 저장할 것이다.
$.ajax({
type: 'POST', // type: HTTP 메서드 종류
url: '{{url_for("ajax")}}', // 요청 URL
data: JSON.stringify(postdata), // 서버로 보낼 데이터
dataType : 'JSON',
contentType: "application/json", // 서버로 보낼 컨텐츠 유형
// 요청 완료시 호출
success: function(data){
alert('성공! 데이터 값:' + data.result2['id']+" " + data.result2['name']+ " " + data.result2['context'])
},
// 요청 실패시 호출
error: function(request, status, error){
alert('ajax 통신 실패')
alert(error);
}
})
})
POST 방식으로 생성된 데이터를 확인하고 있다. POST 요청을 통해 얻은 데이터를 json 형식으로 얻으려면 request.get_json()을 이용하면 된다는 것을 기억하자.
그리고 아래는 위의 ajax를 이용하는 flask 코드이다.
@app.route('/ajax', methods=['POST'])
def ajax():
# json 형태로 데이터를 저장
data = request.get_json()
board.append(data)
# 데이터를 반환
return jsonify(result = "success", result2 = data)
jsonify를 이용하며 result와 result2 결과를 반환하는데 성공하면, ajax에서
success: function(data){
alert('성공! 데이터 값:' + data.result2['id']+" " + data.result2['name']+ " " + data.result2['context'])
}
를 통해 웹 페이지에 알림창을 띄워준다.
이렇게 만들어진 form에 내용을 입력하고 execute하면 아래와 같은 알림창이 뜬다.
2) UPDATE와 DELETE 구현
(단, 삭제되거나 수정되는 데이터는 board(게시판)의 가장 마지막 데이터다.)
HTML (UPDATE와 DELETE의 ajax)
=== update ===
$('#update').click(function(){
var id = $('#id1').val();
var name = $('#name1').val();
var context = $('#context1').val();
var postdata = {
'id':id, 'name':name, 'context':context
}
$.ajax({
type: 'PATCH',
url: '{{url_for("put")}}',
data: JSON.stringify(postdata),
dataType : 'JSON',
contentType: "application/json",
success: function(data){
alert("성공! 새로고침")
window.location.reload();
},
error: function(request, status, error){
alert('ajax 통신 실패')
alert(error);
}
})
})
=== delete ===
$('#delete').click(function(){
$.ajax({
type: 'DELETE',
url: '{{url_for("delete")}}',
contentType: "application/json",
success: function(){
alert("성공! 새로고침")
window.location.reload();
},
error: function(request, status, error){
alert('ajax 통신 실패')
alert(error);
}
})
})
두 ajax 모두 성공 시 알림창을 띄워주는 함수와 실패 시 error를 전달해주는 함수가 있다.
# DELETE
@app.route('/board', methods=['DELETE']) # 삭제 시 method는 DELETE
def delete():
del board[-1]
return jsonify({"result":"success"})
# UPDATE
@app.route('/board', methods=['PATCH']) # 수정 시 method는 PATCH 사용
def put():
data = request.get_json() # 데이터를 json 형태로 받아옴
board[-1] = data # 제일 마지막 데이터를 data로 변경
return jsonify({"result":"success"})
UPDATE할 때 메서드는 PATCH를 사용했다. 글 목록의 맨 마지막을 지우거나 수정하기 때문에
board[-1]을 사용하여 글에 접근할 수 있다.
두 작업 모두 성공 시 json형태로 "result":success"를 반환한다. 여기서 success는 ajax에 작성된 success: 부분을 받아온다.
출처: 강의, 코드 참고는 엘리스 AI트랙
'Backend > Flask' 카테고리의 다른 글
Flask Test - 테스트 코드를 사용한 기능 확인 테스트 (0) | 2022.03.01 |
---|---|
flask-restful - RESTful API서버를 만드는 라이브러리 (0) | 2022.03.01 |
Flask 기초 - REST API (1) (create, read) (0) | 2022.02.23 |
Flask 기초 I - SQL Alchemy (0) | 2022.02.16 |
Flask 기초 I - RDB와 Flask 상호작용, 간단한 게시판, Flask JWT (0) | 2022.02.11 |