코딩/스파르타코딩-웹개발

웹개발 4주차 개발일지(1) - flask

김기지 2022. 10. 24. 21:58

◎ 오늘 배울 것?

-HTML과 mongoDB를 연동해서 서버 만들기

 

● 로컬 개발환경 : 한 컴퓨터에 서버를 만들어 요청과 출력을 한 번에 하는 것.

                             클라이언트 = 서버

mongoDB Atlas를 사용하는 경우

 


○ flask 시작하기

flask패키지를 설치하자.

app.py파일을 하나 새로 만들어 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)

 

새 창을 열어 주소창에 'localhost:5000'을 입력하면 새로운 페이지가 나온다.

하나 더 만들어보자.

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

 

 

이번엔 주소창 뒤에 '/mypage'를 입력해보자.

각 페이지마다 요청하는 방식을 다르게 해서 여러 페이지를 만들 수 있다.

 


○ flask에 HTML파일 연결하기

flask를 사용하려면 정해진 프레임워크를 따라야한다.

 

● 기본 폴더 구조 : 같은 폴더 안에 존재해야하는 기본 폴더 구조가 존재한다.

- static폴더 : 이미지, css파일을 넣어둠

- templates폴더 : html파일을 넣어둠

- app.py파일

왜 필요할까?

먼저 app.py파일로 페이지에 버튼을 넣어보자.

@app.route('/')
def home():
   return '<button>버튼</button>'

페이지에 버튼이 나온다.

그렇다면 페이지를 만들 때마다 버튼의 자리에 모든 html요소를 입력해야될까?

놉!!

그렇게 한다면 코드가 너무 길어지게 되어 보기에도 입력하기에도 불편할 것이다.

→ 기본 폴더 구조에 각각의 속성을 넣어 연결해주자!

 

먼저 html을 넣기 위해 templates폴더에 index.html파일을 만들어준다.

테스트를 위해 제목과 버튼을 넣어주자.

<body>
    <h1>나의 첫 웹페이지</h1>
    <button>버튼입니다</button>
</body>

 

 

이제 app.py파일에 연결을 해준다.

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

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


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

해당 html파일을 넣어주고 실행하자.

여기서 html파일을 연것과 'localhost:5000'으로 연것은 무슨 차이가 있을까?

 

전자는 내 컴퓨터에 저장되어있는 파일을 꺼내준것이고,

후자는 내가 만든 서버에서 해당 페이지를 보여주는 것이다.

 


○ API만들기

서버에 클라이언트가 요청을 할 때, 필요에 따른 해당 HTTP요청 메서드를 사용한다.

여기서는 가장 많이 쓰이는 방식인 'GET', 'POST'방식을 사용해본다.

 

- GET : 데이터 조회 요청시 사용.

             데이터 전달 방식 : url뒤에 ?를 붙여 key=value로 전달.( ex) google.com?q=북극곰)

 

- POST : 데이터 생성, 수정, 변경, 삭제 요청시 사용.

              데이터 전달 방식 : 바로 보이지않는 HTML body에 key:value 형태로 전달

 

 

 

 

● GET, POST요청에서 클라이언트의 데이터를 받는 방법

클라이언트가 서버에서 'title_give'라는 key값으로 데이터를 가져온다고 해보자.

 

1) jquery임포트하기 → ajax로 요청하기위함

코드스니펫을 가져와 html파일에 넣어준다.

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

버튼을 누르면 동작이 실행하도록 함수를 정의해주자.

먼저 버튼에 동작을 넣어준다.

    <button onclick="hey()">버튼입니다</button>

 

2-1) GET방식으로 가져오기

이제 함수를 정의하는데 안에 get요청을 확인하는 ajax코드를 넣어준다. (코드스니펫)

    <script>
        function hey() {
            $.ajax({
                type: "GET",
                url: "/test?title_give=봄날은간다",
                data: {},
                success: function (response) {
                    console.log(response)
                }
            })
        }
    </script>

코드를 보면

url이 /test라는 창구에 가서 title_give라는 이름으로 '봄날은간다'라는 데이터를 갖고간다

라는 의미이고 이 요청이 성공한다면 해당 응답을 콘솔창에 찍어준다.

 

2-2) /test창구 만들기

app.py파일에 가서 get 요청 API코드를 넣는다. (코드스니펫)

request, jsonify도 추가해주자.

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



@app.route('/test', methods=['GET'])
def test_get():
   title_receive = request.args.get('title_give')
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 GET!'})

코드를 보면

/test창구에서 'title_give'의 값을 가져와 변수로 선언 후 찍어준 다음 데이터를 다시 보내주어

html파일로 다시 가서 동작을 마무리한다.

 

실행 후 페이지의 버튼을 눌러보자.

버튼을 누르니 서버에서 보내준 값을 콘솔창에 띄운다.

 

 

 

3-1) POST방식으로 가져오기

html파일에 post 요청 확인 ajax코드를 넣어주자. (코드스니펫)

$.ajax({
    type: "POST",
    url: "/test",
    data: { title_give:'봄날은간다' },
    success: function(response){
       console.log(response)
    }
  })

코드를 보면

/test창구에서 title_give의 값이 '봄날은간다'인 데이터(key:value)를 가지고간다

라는 의미이고 요청에 성공한다면 콘솔창에 찍힌다.

 

3-2) /test서버 만들기

post요청 API코드를 넣어준다. (코드스니펫)

@app.route('/test', methods=['POST'])
def test_post():
   title_receive = request.form['title_give']
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

코드를 보면

'title_give'를 받아와서 찍어준 후 데이터를 돌려주어 html의 동작을 실행한다.

실행을 해보자.

 

 

 

728x90