부트캠프/사전스터디

항해 개발일지(23.03.23)-4

챠나 2023. 3. 23. 18:48

[Flask - 서버만들기]

1. 원하는 폴더로 이동 한다.

2. app.py를 만든다.

3.터미널을 켠다.

4. 가상환경을 잡는다.

python -m venv venv

 

3.8.6 64bit를 클릭 한 다음

venv 클릑!

app.py의 터미널을 껐다가 다시 새 터미널을 켜주면

(venv)로 잡히게된다.


<flask 시작코드>

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
   return 'This is Home!'

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

기본적인 flask의 사용법을 익혀보았다.

이렇게 파일을 만들고 (오타없이 만드는 것이 중요!!)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <title>Document</title>

    <script>
        function hey(){
            alert('안녕!')
        }
    </script>
</head>
<body>
    <h1>제목을 입력합니다</h1>
    <button onclick="hey()">나는 버튼!</button>
</body>
</html>

index.html 파일에 코드를 입력한 후

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

@app.route('/')
def home():
   return 'This is Home!'

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

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

app.py에 코드를 적어주는데

이부분을 적어주어야 index.html에 쓴 코드가 app.py에 적용이 된다.

연동이 잘 되었는지 확인!

[API만들기]

* GET 요청 : 통상적으로 데이터 조회(Read)를 요청할 때, 사용

ex) 영화 목록 조회 → 데이터 전달 : URL 뒤에 물음표를 붙여 key=value로 전달

 

* POST 요청 : 통상적으로 데이터 생성(Create),변경(Update),삭제(Delete) 요청 할 때 사용

ex) 회원가입, 회원탈퇴, 비밀번호 수정 → 데이터 전달 : 바로 보이지 않는 HTML

 

<화성에 땅 사놓기 웹 만들기> ------POST연습(주문 저장하기)

1. 데이터 명세

: 어떤 데이터를 보내야하는지 목록 정하기!

● URL=/mars, 요청방식 = POST

 클라(fetch)  → 서버(flask) : name, address, size

서버(flask) → 클라(fetch) : 메시지를 보냄(주문완료!)

 

2. 클라이언트와 서버 연결 확인하기

: 서버 코드 인 app.py와 클라이언트 코드 인 index.html 만들기

 

3. 서버부터 만들기

: 받을 곳을 만드는것

- dbmongo와 연결시켜라

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

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.nc1oqq4.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

flask 코드 밑에 pymongo 코드 넣어주기

 

4. 클라이언트 만들기

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

        let formData = new FormData();
        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) => {
            alert(data["msg"]);
            window.location.reload()
          });
       }

<화성에 땅 사놓기 웹 만들기> ------GET연습(주문 보여주기)

데이터베이스까지 완성했으니 이제 이름, 주소, 평수를 기입하면 저장하여 화면에 띄우기를 할 것이다.

이번에도 순서는 위와 동일.

 

1.데이터 명세

● URL=/mars, 요청방식 = GET

 클라(fetch)  → 서버(flask) : 없음

 서버(flask) → 클라(fetch) : 전체 주문을 보내주기

 

 

2. 클라이언트와 서버 연결 확인하기

[서버 코드 - app.py]

@app.route("/mars", methods=["GET"])
def mars_get():
    return jsonify({'msg': 'GET 연결 완료!'})

[클라이언트 코드 - index.html]

$(document).ready(function() {
	show_order()
})
function show_order() {
    fetch('/mars').then((res) => res.json()).then((data) => {
            console.log(data);
            alert(data["msg"]);
          });
}

3. 서버부터 만들기

result에 주문정보를 담아서 내려주기

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

4. 클라이언트 만들기

-  주문정보는 리스트 형식이기때문에 forEach문으로 반복하여 데이터 내보내기

- 뽑아낸 데이터는 temp_html에 담아주기

- 담아준 temp_html을 넣을 자리를 찾아 jQuery로 aapend 

function show_order() {
        $("#order-box").empty();
        fetch('/mars').then((res) => res.json()).then((data) => {
            let rows = data['result']
	            rows.forEach((a) => {
              let name = a["name"];
              let address = a["address"];
              let size = a["size"];

              let temp_html = `<tr>
                        <td>${name}</td>
                        <td>${address}</td>
                        <td>${size}</td>
                      </tr>`;
              $("#order-box").append(temp_html);
            });
          });
      }

 

완성


오늘도 어찌저찌 따라 가기는 했다.

오늘 숙제는 답안을 보지 않고 혼자 뚝딱 하긴 했는데, 아직까지는 100%이해된 상태가 아니라서 어리둥절하게 완성한 숙제..ㅋㅋㅋㅋㅋ

계속 반복하며 들으면서 따라하면 이해가 되는 것일지,,