본문 바로가기

21. 간이 쇼핑몰 페이지 만들기

by Rudy 2021. 9. 11.

1. 주문하기(POST): 정보 입력 후에 주문하기 버튼을 클릭하면 주문목록에 추가한다.

2. 주문내역보기(GET): 페이지 로딩 후 하단 주문 목록이 자동으로 보인다.

 

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']
    option_receive=request.form['option_give']
    number_receive=request.form['number_give']
    call_receive=request.form['call_give']

    doc = {
        'name': name_receive,
        'option': option_receive,
        'number': number_receive,
        'call': call_receive
    }

    db.orders.insert_one(doc)

    return jsonify({'result': 'success', 'msg': '주문이 완료 되었습니다.'})


# 주문 목록보기(Read) API
@app.route('/order', methods=['GET'])
def view_orders():
    orders=list(db.orders.find({},{'_id': False}))
    return jsonify({'result': 'success', '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=Stylish&display=swap" rel="stylesheet">
</head>
<style>
 *{
    font-family: 'Stylish', sans-serif;
    }
 .wrap{
     width:500px;
     margin:auto;
 }
 .price{
     font-size: 15px;
 }
 .item-line{
     width:500px;
 }
 .order-info{
     width:500px;
     argin-bottoms:50px;
 }
</style>
<script>
        $(document).ready(function(){
	q1();
	show_order();
});
        function show_order(){
         $.ajax({
                    type: "GET",
                    url: "/order",
                    data: {},
                    success: function (response) {
                        if(response["result"]=="success") {
                            let sell = response['orders']
                            for (let i = 0; i < sell.length; i++) {
                                let name = sell[i]['name']
                                let option = sell[i]['option']
                                let number = sell[i]['number']
                                let call = sell[i]['call']

                                let temp_html = `<tr>
                                                <th scope="row">${name}</th>
                                                <td>${option}</td>
                                                <td>${number}</td>
                                                <td>${call}</td></tr>`
                                $('#orders-box').append(temp_html)
                            }
                        }
                    }
                })
            }

     function q1() {

            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/rate",
                data: {},
                success: function (response) {
                    let rows = response['rate'];
                    $('#q1-price').text(rows+' / 달러-원 환율');


                }

            })
        }
        function order(){
        let name=$('#order-name').val();
        let option=$('#order-option').val();
        let number=$('#order-number').val();
        let call=$('#order-call').val();

         $.ajax({
                    type: "POST",
                    url: "/order",
                    data: {name_give: name,option_give:option,number_give:number,call_give:call},
                    success: function (response) {
                        alert(response["msg"]);
                        window.location.reload();
                    }
                })
        }


</script>

<body>
<div class="wrap">
<img class="card-img-top" src="http://gdimg.gmarket.co.kr/1159210155/still/600?ver=1510293353" alt="Card image cap">
   <div class="item-line">
    <h1>귀여운 곰 인형을 팝니다. <span class="price" >가격:1,0000원/개</span></h1>
       <p class="rate"><span id="q1-price">1000</span></p>
    <p>미니소에서 팔고 있는 귀여운 곰 인형이에요. 카카오톡 선물하기에도 이렇게 생긴 곰인형이 많더라구요. 제 애착인형이에요.</p>
   </div>


<div class="order-info">

<div class="input-group mb-3">
  <div class="input-group-prepend">
    <span class="input-group-text" >주문자 이름</span>
  </div>
  <input id="order-name" type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default">
</div>
    <div class="input-group mb-3">
  <div class="input-group-prepend">
    <label class="input-group-text" for="inputGroupSelect01">옵션</label>
  </div>
  <select id="order-option" class="custom-select" >
    <option selected>--옵션을 선택하세요--</option>
    <option value="1">브라운 베어</option>
    <option value="2">허니 베어</option>
    <option value="3">블랙 베어</option>
  </select>
</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 id="order-number" selected>--수량을 선택하세요--</option>
    <option value="1">1개</option>
    <option value="2">2개</option>
    <option value="3">3개</option>
  </select>
</div>
    <div class="input-group mb-3">
  <div class="input-group-prepend">
    <span class="input-group-text" >전화번호</span>
  </div>
  <input id="order-call" type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default">
        </div>

        <button type="button" onclick="order()" class="btn btn-outline-info">주문하기</button>
</div>
<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="orders-box">

    </tbody>
</table>
</div>



</body>

</html>

 

'' 카테고리의 다른 글

덕담 보내기, 주기 토이프로젝트  (0) 2022.02.01
이미지  (0) 2022.01.31
20. 영화 리뷰 메모장(2)  (0) 2021.09.10
19. 메모장(1)  (0) 2021.09.08
18. 모두의 북리뷰 페이지 만들기  (0) 2021.09.06

댓글