Flask

hihyeon_cho·2022년 10월 25일
1

sparta-web

목록 보기
7/8

Flask

API 서버를 만들 수 있는 Python의 웹 프레임워크

Flask 시작하기

1 ) 이전과는 달리 파일 > 새 프로젝트로 만들어서 시작
프로젝트 파일 하위에 'static', 'templates' 폴더 2개와 'app.py'파일 만들기

  • static : images,css파일 넣어두는 폴더
  • templates : html파일 넣어두는 폴더
  • app.py : flask 서버를 돌리는 파일

2 )
( pycharm에서 다운로드함 )
pycharm실행 > 설정 > 프로젝트 > python 인터프리터 > + > 'Flask' 검색 > 패키지 다운로드
( mongoDB를 이용하여 프로젝트를 만들 때, Flask,pymongo, dnspython 패키지 다운로드해서 사용 )



Flask 실행하기

'Hello Flask!'출력하기

flask 서버를 돌리는 'app.py'파일에 아래 코드 입력

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
   return 'Hello Flask!'

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

마우스 우클릭 > 실행 클릭 > 터미널에 연결된 메시지 확인 > 크롬에서 localhost:5000/ 으로 접속 > 'Hello Flask!'라는 메시지가 보인다. > OK

종료할 때는 터미널에서 Ctrl + C 누르기!

페이지나누기

@app.route('/주소') 부분을 수정해서 URL을 나눌 수 있다.
(url별로 함수명이 중복되거나, route('/')내의 주소가 동일하면 안됨.)

@app.route('/')
def home():
   return 'Hello Flask!'

@app.route('/mypage')
def mypage():  
   return 'Hello my page!'

위와 같이 코딩했을 시,
'localhost:5000/mypage' 로 접속하면 'Hello my page!'라는 메시지가 보인다.

HTML파일 불러오기

ex ) localhost:5000/에 접속했을 때, 'index.html' 불러오기

  • html 파일을 넣어두는 'templates' 폴더 안에 index.html 파일을 만든다.

  • flask의 내장함수 render_template 이용

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)

render_template 를 추가로 import하고,
route했을 때 render_template('index.html')을 return하면 원하는HTML파일을 불러올 수 있다.

GET & POST

GET

: 데이터조회(Read)를 요청할 때 사용. URL뒤에 ?를 붙여 key=value로 전달

POST

: 데이터생성(Create), 변경(Update), 삭제(Delete)를 요청 할 때 사용. HTML body에 key=value로 전달

GET 요청으로 데이터 받기

1 ) html파일 script태그안에 ajax코드입력
test라는 창구에 title_give라는 이름으로, '봄날'이라는 데이터를 가져가서, 잘 된다면 서버로 부터 받는 데이터를 콘솔에 찍겠다는 의미

$.ajax({
    type: "GET",
    url: "/test?title_give=봄날",
    data: {},
    success: function(response){
       console.log(response)
    }
  })

2 ) '/test'창구 만들기
app.py 파일에 request,jsonify 추가로 import

@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를 route하면 'titlegive'라는 이름으로 데이터를 받아와서 title_receive라는 변수에 넣어 print한다. 이를 마치면 console창에 {'result':'success', 'msg': 'GET요청!'}라는 데이터를 돌려준다.
( $.ajax에 입력했던 _success: function(response){console.log(response)}
의 내용 )

POST 요청으로 데이터 받기

1 ) html파일 script태그안에 ajax코드입력
'/test'에 '봄날'이라는 데이트를 가져간다.

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

2 ) POST로 받는 데이터창구
app.py 파일에 아래 코드를 추가로 입력하게 되면 'titlegive'라는 이름으로 데이터를 받아와서 title_receive라는 변수에 넣어 print한다. 이를 마치면 console창에 {'result':'success', 'msg': 'POST요청!'}라는 데이터를 돌려준다.
( $.ajax에 입력했던 _success: function(response){console.log(response)}
의 내용 )

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

Flask 공부 리뷰

서버를 만들때, 강의자료는 5000번 터미널에 연결하라고 했었지만, 나는 계속 5000번 서버가 이미 연결이 되어있다고 오류가 떴었다. 그래서 port번호를 다른 번호로 넣었더니 잘 연결 되었다.

갑자기 5000번포트의 행방이 궁금해서 터미널을 실행시켜 lsof -i :5000 으로 터미널이 왜 연결 중인지 확인했다. ControlCe가 사용하고 있다고 나와서 강제종료를 했는데, 계속 다시 연결이 되어 난감했다. 구글에서 찾아보니 mac의 Airplay모드가 켜져 있어서 그런거라고 한다. 이는 AirPlay수신모드를 끄면 해결 가능한 문제였다.

지금껏 express로만 서버를 생성했었어서 Flask로 서버를 생성하는게 새롭고 재밌었다.
하지만, 서버를 만드는 건 여전히 어렵다...(express도 익숙치않음) Flask는 연습 많이해야지... ☆

profile
코딩은 짜릿해 늘 새로워 ✨

0개의 댓글