Flask

qkrrnjswo·2023년 3월 23일
0

온보딩 커리큘럼

목록 보기
15/17

웹개발 종합반

1. 4주차

1-2. Flask 시작하기 - 서버만들기

1) 가상의 폴더 하나 만들기
     1. 폴더하나 만들기
     2. 터미널 git bash로 설정
     3. 인터프리터 선택(원하는 파이썬 버전)
     4. python -m venv venv (가상의 라이브러리 폴더 만들어짐)
     5. 인터프리터 venv를 선택
     6. 터미널 git bash를 설정, venv가 뜨면 성공
     7. pip install flask

2) 프레임워크 Flask이용
          from flask import Flask
          app = Flask(__name__)

          @app.route('/')
          def home():
             return 'HTML 파일'

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

1-4. Flask 시작하기 - HTML 파일 주기

    1) render_template 를 이용하여 웹페이지 만들기
    	1. template폴더 만들기
        2. template폴더에 html만들기
        3. 코드에 render_template 추가
        4. 루트에 render_template('index.html')로 불러오기
    
          from flask import Flask, render_template
          app = Flask(__name__)

          ## URL 별로 함수명이 같거나,
          ## route('/') 등의 주소가 같으면 안됨
          @app.route('/')
          def home():
             return render_template('index.html')

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

1-5. Flask 시작하기 - 본격 API 만들기

    1. app.py
	
from flask import Flask, render_template, request, jsonify
from pymongo import MongoClient

client = MongoClient('MongoDB url, password')
db = client.dbsparta

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

# 주기 == 사용자가 입력한 값을 DB에 넣기
@app.route("/mars", methods=["POST"])
def 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':'저장완료!'})

# 받기 == 서버에서 원하는 값 받기
@app.route("/mars", methods=["GET"])
def mars_get():
    marsdata = list(db.mars.find({},{'_id':False}))
    return jsonify({'result':marsdata})

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

    2. index.html
    
<!DOCTYPE html>
<html lang="en">

<head>
...
    <style>
	...
    </style>
    <script>
        $(document).ready(function () {
            show_order();
        });
        function show_order() {
            fetch('/mars').then((res) => res.json()).then((data) => {
                console.log(data)
                $('#order-box').empty()

                let rows = data['result']
                
                rows.forEach(element => {
                    let name = element['name']
                    let address = element['address']
                    let size = element['size']

                    let temp_html = `<tr>
                                        <td>${name}</td>
                                        <td>${address}</td>
                                        <td>${size}</td>
                                    </tr>`
                    $('#order-box').append(temp_html)
                });
            })
        }
        function save_order() {
            let formData = new FormData();

            let name = $('#name').val()
            let address = $('#address').val()
            let size = $('#size').val()

            formData.append("name_give", name)
            formData.append("address_give", address)
            formData.append("size_give", size)

            fetch('/mars', { method: "POST", body: formData }).then((res) => res.json()).then((data) => {
                console.log(data)
                alert(data["msg"])
                window.location.reload()
            });
        }
    </script>
</head>

<body>
    <div class="mask"></div>
    <div class="order">
        <div class="order-info">
            <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">
                <tr>
                    <td>홍길동</td>
                    <td>서울시 용산구</td>
                    <td>20평</td>
                </tr>
                <tr>
                    <td>임꺽정</td>
                    <td>부산시 동구</td>
                    <td>10평</td>
                </tr>
                <tr>
                    <td>세종대왕</td>
                    <td>세종시 대왕구</td>
                    <td>30평</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>

</html>

0개의 댓글