내일배움캠프[4기_Reac트랙]/웹개발종합반(내일배움단)
4주차(6~9)-화성땅 공동구매(GET, POST)
ecoEarth
2022. 11. 3. 13:07
프로젝트 세팅
1. 새 프로젝트 -> 폴더선택 -> venv확인 -> 3.8버전확인 -> (이창에서 실행)창 클릭
2. 인터프리터 -> 패키지 설치 [Flask, pymongo, dnspython, certifi]
POST 연습(주문 저장)
구현해야할 기능 -> 이름, 주소, 평수값을 제출하고, 그 값을 서버에 저장하기 -> 저장이므로 POST방식 사용
- 클라(ajax) → 서버(flask) : name, address, size
- 서버(flask) → 클라(ajax) : 주문완료확인 메세지 출력
function save_order() {
let name = $('#name').val()
let address = $('#address').val()
let size = $('#size').val()
$.ajax({
type: 'POST',
url: '/mars',
data: {name_give:name, address_give:address, size_give:size},
success: function (response) {
alert(response['msg'])
window.location.reload()
}
});
}
<button onclick="save_order()" type="button" class="btn btn-warning mybtn">주문하기</button>
클라이언트(ajax)
[버튼 클릭 → save_order함수 실행 → 변수가 각각 '변수_give'에 담김 -> 성공하면 메시지 출력됨]
@app.route("/mars", methods=["POST"])
def web_mars_post():
name_receive = request.form['name_give']
address_receive = request.form['address_give']
size_receive = request.form['size_give']
doc = {'name':name_receive,
'address':address_receive,
'size':size_receive
}
db.mars.insert_one(doc)
return jsonify({'msg': 'POST 연결 완료!'})
서버(flask)
[mongoDB에 저장 → 메시지 출력]
GET 연습(주문 보여주기)
구현해야할 기능 -> 이미 저장된 이름, 주소, 평수값을 서버로부터 받아오기 -> 요청이므로 GET방식 사용
- 클라(ajax) → 서버(flask) : 없음
- 서버(flask) → 클라(ajax) : 전체 주문을 보내주기
<script>
$(document).ready(function () {
show_order();
});
function show_order() {
$.ajax({
type: 'GET',
url: '/mars',
data: {},
success: function (response) {
alert(response['msg'])
}
});
}
function save_order() {
let name = $('#name').val()
let address = $('#address').val()
let size = $('#size').val()
</script>
로딩이 되자마자 showoder을 부른다. -> showorder은 GET방식으로 /mars에 요청한다.
서버조작하기
@app.route("/mars", methods=["GET"])
def mars_get():
orders_list = list(db.orders.find({},{'_id':False}))
return jsonify({'orders':orders_list})
oders라는 이름으로 order_list를 받아간다고 명령한다.
클라이언트 조작하기
<script>
$(document).ready(function () {
show_order();
});
function show_order() {
$.ajax({
type: 'GET',
url: '/mars',
data: {},
success: function (response) {
let rows = response['orders']
for (let i = 0; i < rows.length; i++) {
let name = rows[i]['name']
let address = rows[i]['address']
let size = rows[i]['size']
let temp_html = `<tr>
<td>${name}</td>
<td>${address}</td>
<td>${size}</td>
</tr>`
$('#order-box').append(temp_html)
}
}
});
}
</script>
1. 서버코드에서 oders라는 이름으로 order_list를 받아간다고 명령했으므로, 주문하기를 누르고 콘솔창을 보면 orders에 받아야할 값들이 저장되어있다. 따라서 rows라는 변수에 response['orders']로 값을 받아온다.