페이지 새로고침하게 만드는 코드 (JS)
window.location.reload()
복습을 제대로 안 했더니 이전 주차에서 했던 걸 다 까먹어서 저게 뭐였지 하고 있다^.T
오늘의 숙제. Flask 프레임워크를 이용하여 로컬 개발환경에서
서버에 클라이언트로서 get, post 요청을 하여 쇼핑몰 페이지에 반영해보기.
app.py 코드
from flask import Flask, render_template, jsonify, request
app = Flask(__name__)
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhomework
## HTML 화면 보여주기
@app.route('/')
def homework():
return render_template('index.html')
# 주문하기(POST) API
@app.route('/order', methods=['POST'])
def save_order():
name_receive = request.form['name_give']
op_receive = request.form['op_give']
adr_receive = request.form['adr_give']
cell_receive = request.form['cell_give']
doc = {
'name': name_receive,
'option': op_receive,
'address': adr_receive,
'number': cell_receive
}
db.shopping.insert_one(doc)
return jsonify({'msg': '주문이 완료되었습니다.'})
# 주문 목록보기(Read) API
@app.route('/order', methods=['GET'])
def view_orders():
orders = list(db.shopping.find({}, {'_id': False}))
return jsonify({'all_orders': orders})
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
index.html 코드
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"></script>
<title>기획서 만들기</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+KR&display=swap" rel="stylesheet">
<style>
* {
font-family: 'Noto Serif KR', serif;
}
.image {
width: 500px;
height: 300px;
margin: 40px auto 20px auto;
background-image: url("https://cafe24img.poxo.com/andar01/web/product/extra/big/202010/4b33986cbec184906a16aeec5c256d65.jpg");
background-size: cover;
background-position: center;
}
.exp {
width: 500px;
margin: auto;
}
.more_exp {
font-size: 15px;
margin: 15px auto 10px auto;
}
.button {
width: 100px;
margin: 25px auto auto auto;
}
.dollar {
color: blue;
margin: auto auto 20px auto;
}
.list {
margin-top: 100px;
}
</style>
<script>
$(document).ready(function () {
q1();
showList();
});
function q1() {
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/rate",
data: {},
success: function (response) {
let dol = response['rate']
let temp_html = `${dol}`
$('#money').append(temp_html)
}
})
}
function makeList() {
let name = $('#name-box').val()
let option = $('#inputGroupSelect01').val()
let address = $('#adr-box').val()
let number = $('#cell-box').val()
$.ajax({
type: "POST",
url: "/order",
data: {name_give: name, op_give: option, adr_give: address, cell_give: number},
success: function (response) {
alert(response["msg"]);
window.location.reload();
}
})
}
function showList() {
$.ajax({
type: "GET",
url: "/order",
data: {},
success: function (response) {
let list = response['all_orders']
for (let i = 0; i < list.length; i++) {
let name = list[i]['name']
let option = list[i]['option']
let address = list[i]['address']
let number = list[i]['number']
let temp_html = `<tr>
<th scope="row">${name}</th>
<td>${option}</td>
<td>${address}</td>
<td>${number}</td>
</tr>`
$('#list-box').append(temp_html)
}
}
})
}
</script>
</head>
<body>
<div class="image"></div>
<div class="exp">
<h1><span style="font-weight: bold;"> 마사지볼 </span> <span style="font-size: 17px;">가격 : 4,000원 / 개</span></h1>
<div class="more_exp">
작지만 단단한 마사지볼! 마사지볼은 우리 몸에 뭉쳐있는 근육들을 풀어주고 혈액이 순환되도록 도와줍니다.
운동과 병행하면서 꾸준히 마사지를 하면 더욱 더 건강해질 수 있습니다!
</div>
<div class="dollar">
달러-원 환율 : <span id="money"></span>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">주문자 성함</span>
</div>
<input type="text" class="form-control" aria-label="Default"
aria-describedby="inputGroup-sizing-default" id="name-box">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<label class="input-group-text" for="inputGroupSelect01">옵션</label>
</div>
<select class="custom-select" id="inputGroupSelect01">
<option selected>-- 옵션 및 수량을 선택하세요. --</option>
<option>단일볼 1개</option>
<option>땅콩볼 1개</option>
<option>단일볼 1 + 땅콩볼 1</option>
</select>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">주소</span>
</div>
<input type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default"
id="adr-box">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroup-sizing-default">전화번호</span>
</div>
<input type="text" class="form-control" aria-label="Default"
aria-describedby="inputGroup-sizing-default" id="cell-box">
</div>
<div class="button">
<button onclick="makeList()" type="button" class="btn btn-primary">주문하기</button>
</div>
<div class="list">
<table class="table">
<thead>
<tr>
<th scope="col">성함</th>
<th scope="col">옵션</th>
<th scope="col">주소</th>
<th scope="col">전화번호</th>
</tr>
</thead>
<tbody id="list-box">
</tbody>
</table>
</div>
</div>
</body>
</html>
수업 때 따라쳤던 코드 계속 살펴보면서 친 거라 어버버거렸지만
리액트 네이티브 수업보다는 수월하게 숙제를 했던 거 같다.
앱이랑 웹 수업을 번갈아 들으니까 양식이 헷갈린다ㅋㅋㅋㅋㅋㅋ
완성된 페이지는 이것!
'스파르타 코딩클럽' 카테고리의 다른 글
2022.01.26 (0) | 2022.01.26 |
---|---|
2022.01.20 (0) | 2022.01.20 |
2022.01.14 (0) | 2022.01.14 |
2022.01.12~13 (0) | 2022.01.12 |
2022.01.07 (0) | 2022.01.07 |
2022.01.06 (0) | 2022.01.06 |
2022.01.05 (0) | 2022.01.05 |
2022.01.03 (0) | 2022.01.03 |