Dhey 2022. 2. 12. 18:01
๋ฐ˜์‘ํ˜•

POST์™€ GET ๋ชจ๋‘ ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

   1. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ํ™•์ธํ•˜๊ธฐ

   2. ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

   3. ํด๋ผ์ด์–ธํŠธ ๋งŒ๋“ค๊ธฐ

   4. ์™„์„ฑ ํ™•์ธํ•˜๊ธฐ

 

 


 

โ–ถ POST API ๋งŒ๋“ค๊ธฐ

  ์ด๋ฆ„, ์ฃผ์†Œ, ํ‰์ˆ˜ ์ €์žฅํ•˜๊ธฐ(Create → POST)

    1. ์š”์ฒญ ์ •๋ณด: URL= /mars, ์š”์ฒญ ๋ฐฉ์‹ = POST

    2. ํด๋ผ์ด์–ธํŠธ(ajax) → ์„œ๋ฒ„(flask) : name, address, size

    3. ์„œ๋ฒ„(flask) → ํด๋ผ์ด์–ธํŠธ(ajax) : ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ„ (์ฃผ๋ฌธ ์™„๋ฃŒ)

 

  * ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

    → name, address, size ์ •๋ณด๋ฅผ ๋ฐ›์•„์„œ ์ €์žฅ

@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': '์ฃผ๋ฌธ ์™„๋ฃŒ'})

  * ํด๋ผ์ด์–ธํŠธ ๋งŒ๋“ค๊ธฐ

    → name, address, size ์ •๋ณด ๋ณด๋‚ด๊ธฐ

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()
                }
            });
        }

 

 

โ–ถ GET API ๋งŒ๋“ค๊ธฐ

  ์ €์žฅ๋œ ์ฃผ๋ฌธ์„ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ธฐ(Read → GET)

    1. ์š”์ฒญ ์ •๋ณด: URL= /mars, ์š”์ฒญ ๋ฐฉ์‹ = GET

    2. ํด๋ผ์ด์–ธํŠธ(ajax) → ์„œ๋ฒ„(flask) : (์—†์Œ)

    3. ์„œ๋ฒ„(flask) → ํด๋ผ์ด์–ธํŠธ(ajax) : ์ „์ฒด ์ฃผ๋ฌธ์„ ๋ณด๋‚ด์ฃผ๊ธฐ

 

  * ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

    → ๋ฐ›์•„์˜ฌ ๊ฒƒ ์—†์ด orders์— ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๋‚ด๋ ค์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ

@app.route("/mars", methods=["GET"])
def web_mars_get():
    order_list = list(db.mars.find({}, {'_id': False}))
    return jsonify({'orders':order_list})

 

* ํด๋ผ์ด์–ธํŠธ ๋งŒ๋“ค๊ธฐ

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)
                    }
                }
            });
        }

 

 


 

 

์™„์„ฑ๋œ ์ „์ฒด์ฝ”๋“œ์ด๋‹ค.

< app.py > _์„œ๋ฒ„

from flask import Flask, render_template, request, jsonify
app = Flask(__name__)

from pymongo import MongoClient
client = MongoClient('mongodb+srv://id:pw@cluster0.7n9jh.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

//index.html ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
@app.route('/')
def home():
    return render_template('index.html')

//POST
@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': '์ฃผ๋ฌธ ์™„๋ฃŒ'})

//GET
@app.route("/mars", methods=["GET"])
def web_mars_get():
    order_list = list(db.mars.find({}, {'_id': False}))
    return jsonify({'orders':order_list})

if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

 

<index.html> _ํด๋ผ์ด์–ธํŠธ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
            integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
            crossorigin="anonymous"></script>

    <link href="https://fonts.googleapis.com/css2?family=Gowun+Batang:wght@400;700&display=swap" rel="stylesheet">

    <title>์„ ์ฐฉ์ˆœ ๊ณต๋™๊ตฌ๋งค</title>

    <style>
        * {
            font-family: 'Gowun Batang', serif;
            color: white;
        }
        body {
            background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://cdn.aitimes.com/news/photo/202010/132592_129694_3139.jpg');
            background-position: center;
            background-size: cover;
        }
        h1 {
            font-weight: bold;
        }
        .order {
            width: 500px;
            margin: 60px auto 0px auto;
            padding-bottom: 60px;
        }
        .mybtn {
            width: 100%;
        }
        .order > table {
            margin: 40px 0;
            font-size: 18px;
        }
        option {
            color: black;
        }
    </style>
    <script>
    	//GET
        $(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)
                    }
                }
            });
        }
		//POST
        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()
                }
            });
        }
    </script>
</head>
<body>
<div class="mask"></div>
<div class="order">
    <h1>ํ™”์„ฑ์— ๋•… ์‚ฌ๋†“๊ธฐ!</h1>
    <h3>๊ฐ€๊ฒฉ: ํ‰ ๋‹น 500์›</h3>
    <p>
        ํ™”์„ฑ์— ๋•…์„ ์‚ฌ๋‘˜ ์ˆ˜ ์žˆ๋‹ค๊ณ ?<br/>
        ์•ž์œผ๋กœ ๋ฐฑ๋…„ ๊ฐ„ ์˜ค์ง€ ์•Š์„ ๊ธฐํšŒ. ํ™”์„ฑ์—์„œ ์ฆ๊ธฐ๋Š” ๋…ธํ›„!
    </p>
    <div class="order-info">
        <div class="input-group mb-3">
            <span class="input-group-text">์ด๋ฆ„</span>
            <input id="name" type="text" class="form-control">
        </div>
        <div class="input-group mb-3">
            <span class="input-group-text">์ฃผ์†Œ</span>
            <input id="address" type="text" class="form-control">
        </div>
        <div class="input-group mb-3">
            <label class="input-group-text" for="size">ํ‰์ˆ˜</label>
            <select class="form-select" id="size">
                <option selected>-- ์ฃผ๋ฌธ ํ‰์ˆ˜ --</option>
                <option value="10ํ‰">10ํ‰</option>
                <option value="20ํ‰">20ํ‰</option>
                <option value="30ํ‰">30ํ‰</option>
                <option value="40ํ‰">40ํ‰</option>
                <option value="50ํ‰">50ํ‰</option>
            </select>
        </div>
        <button onclick="save_order()" type="button" class="btn btn-warning mybtn">์ฃผ๋ฌธํ•˜๊ธฐ</button>
    </div>
    <table class="table">
        <thead>
        <tr>
            <th scope="col">์ด๋ฆ„</th>
            <th scope="col">์ฃผ์†Œ</th>
            <th scope="col">ํ‰์ˆ˜</th>
        </tr>
        </thead>
        <tbody id="order-box">
        </tbody>
    </table>
</div>
</body>
</html>

 

๋ฐ˜์‘ํ˜•