728x90

Flask와 Rest API

1
2
3
4
5
6
7
8
9
10
from flask import Flask
 
app = Flask(__name__)
 
@app.route("/")
def hello():
    return "Hello"
 
if __name__ == "__main__":
    app.run(host="127.0.0.1", port="8080")
cs

 

-> 1번줄에서 flask를 임포트 해오고

-> 3번줄에서 임포트 해온 flask를 app변수에 할당해준다.

  (따라서 앞으로 flask관련된 서버 기능을 쓸때는 app을 호출해서 메소드를 쓰면된다)

-> 5번줄이 바로 이전에 정리한 파이썬 데코레이터 관련 개념이다. 

  : route메소드를 데코레이터 함수로 써서, "/" 해당 API로 라우팅되면, 하단의 hello() 함수가 실행되고, 따라서 "hello"를 리턴해라는 의미

 

Rest API에 변수값을 경로값을 주고싶을 때

-> 아래와 같이 < > 해당 괄호를 활용하여, 변수를 입력하여 사용하면 된다.

1
2
3
@app.route("/profile/<username>")
def get_profile(username):
    return "profile: " + username
cs
 

-> 아래와 같이 변수 값의 타입을 설정해줄수 있다.

1
2
3
@app.route("/message/<int:message_id>")
def get_message(message_id):
    return "message id: " + message_id
cs

 

flask 로 REST API 구현 방법

  • 특정한 URI를 요청하면 JSON 형식으로 데이터를 반환하도록 만들면 됨

  • 즉, 웹주소(URI) 요청에 대한 응답(Response)를 JSON 형식으로 작성

  • Flask에서는 dict(사전) 데이터를 응답 데이터로 만들고(자바스크립트의 객체), 이를 jsonify() 메서드를 활용해서 JSON 응답 데이터로 만들 수 있음

->REST API의 응답데이터 포맷이 JSON형태이기 때문에 매우 중요.

 

HTTPIE : Post Man과 같이 서버상에서 API 통신을 테스트 하는 프로그램

-> 나는 사실 postman 사용에 익숙해져서 계속 postman을 테스터로 사용하려 한다. 

그러나 새로운 프로그램을 쓰실 분들은 참고!

 

1. 설치하기 : brew install httpie

맥에서는 터미널 프로그램으로 현업에서는 iterm2 를 많이 사용함
iterm2 다운로드 및 설치는 해당 사이트 참조: https://www.iterm2.com/

2. 사용하기

http "HTTP메서드" "URI"

 ->HTTP메서드를 쓰지 않으면, 디폴트로 GET

   http GET http://localhost:8080/

 

http -v URI

 -> 송신 HTTP 전송 데이터도 함께 출력

    http -v GET http://localhost:8080/

 

 

flask jsonify( ) 함수 : 리턴 데이터를 JSON포맷으로 제공

 -> 사용은 간단하다! (이것도 자바스크립트와 유사)

 -> jsonify("전달하려는 데이터") : 해당 데이터의 포맷이 JSON으로 변경됨

 

 

flask Rest API로 GET 요청받기

client에서 서버로 요청을 보낼 때

규칙: URL?파라미터1=파라미터1값&파라미터2=파라미터2값

URL 이후 첫 파라미터 이름 전에 ? 를 표시하고, 추가 파라미터가 있을 시에는 & 표시를 해야 함

위의 형태로 API 요청이 온다면, 서버에서는 아래와 같은 코드로 읽어내서 데이터 전송할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from flask import Flask, jsonify, request, render_template
app = Flask(__name__)
 
 
@app.route('/login')
def login():
    username = request.args.get('user_name')
    #request로 client에서 요청이 들어온 데이터에서 
# args.get("파라미터 키값")으로 username이라고 데이터를 정해줌.
   passwd = request.args.get('pw')
   email = request.args.get('email_address')
   print (username, passwd, email)
    
    if username == 'dave':
        return_data = {'auth''success'}
        # return_data 로 client에 전송할 데이터를 저장.
    else:
        return_data = {'auth''failed'}
    return jsonify(return_data)
    #해당 형태로 위에서 저장한 데이터를 client로 보냄
cs

 

flask 로 정적 웹페이지 로드하기

* flask render_template(HTML파일명)

 -> HTML파일은 flask 가 실행되는 하위 폴더인 templates 폴더 안에 위치해야 함

 

최근의 페이지는 시시각각 유저들의 액션에 대응해서 바뀌는 동적인 웹페이지가 대부분이긴 하다.

 

* static_url_path로 정적 웹페이지(실제로는 client의 html나 css파일을 static 경로에 담아두고 쓴다)

-> from flask import Flask, jsonify, request, render_template app = Flask(__name__, static_url_path='/static')

 

* html 상의 경로 변경

   <link rel="canonical" href="https://getbootstrap.com/docs/4.5/examples/sign-in/" />

   <link href="/static/dist/css/bootstrap.min.css" rel="stylesheet" />

728x90

+ Recent posts