반응형

사용자의 API 요청을 위한 정보를 제공할 수 없는 경우 사용자에게 알려주는 에제입니다. 



Flask의 Quickstart 문서를 보며 진행한 과정을 작성한 글입니다. 

https://flask.palletsprojects.com/en/2.0.x/quickstart/ 

 

부족한 부분이나 이상한 부분이 있을 수 있습니다. 

 

개발 환경 구축은 다음 포스트를 참고하세요

 

Windows 10 환경에서 Visual Studio Code와 Miniconda를 사용한 Flask 개발 환경 만들기

https://webnautes.tistory.com/1522 

 

Miniconda를 설치하지 않고  pip install flask 명령으로 해도 상관은 없습니다.



2021. 12. 27  최초작성.



log_example.py로 저장합니다.

 

from flask import Flask, jsonify, request


app = Flask(__name__)


class InvalidAPIUsage(Exception):
    status_code = 400

    def __init__(self, message, status_code=None, payload=None):
        super().__init__()
        self.message = message
        if status_code is not None:
            self.status_code = status_code
        self.payload = payload

    def to_dict(self):
        rv = dict(self.payload or ())
        rv['message'] = self.message
        return rv

@app.errorhandler(InvalidAPIUsage)
def invalid_api_usage(e):
    return jsonify(e.to_dict())


def get_user(user_id):
    print(user_id)
    if int(user_id) == 420:
        return {'user_id': 'webnautes'}
    else:
        return None


# 사용자 정보를 보여주는 API 입니다.
#
# 다음처럼 호출합니다. /api/user?user_id=420
# user_id가 420인 경우에만 정상적으로 사용자의 정보를 보여줍니다.
# 그외의 경우에는 사용자를 찾을 수 없다는 메시지를 보여줍니다.
#
# user_id를 지정하지 않은 경우에는 지정되지 않았다는 메시지를 보여줍니다.
@app.route("/api/user")
def user_api():
    user_id = request.args.get("user_id")
    if not user_id:
        raise InvalidAPIUsage("No user id provided!")

    user = get_user(user_id=user_id)
    if not user:
        raise InvalidAPIUsage("No such user!", status_code=404)

    return jsonify(user)




다음처럼 실행합니다.

 

set FLASK_APP=log_example

flask run



웹브라우저에서 http://127.0.0.1:5000/api/user?user_id=420 로 접속시(user_id가 420으로 지정한 경우)  정상적으로 사용자 정보를 보여줍니다. 

 



http://127.0.0.1:5000/api/user?user_id=111 로 접속시( user_id가 420이 아닌 경우) 해당 유저가 없다는 메시지를 JSON 포맷으로 보여줍니다.

 



user_id 값 없이  http://127.0.0.1:5000/api/user 로 접속하면 user_id가 지정되지 않았다는 메시지를 보여줍니다.

 



반응형

진행해본 결과물을 기록 및 공유하는 공간입니다.
잘못된 부분이나 개선점을 알려주시면 반영하겠습니다.


소스코드 복사시 하단에 있는 앵커 광고의 왼쪽 위를 클릭하여 닫은 후 해야 합니다.


문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

TistoryWhaleSkin3.4">