반응형

사용자의 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가 지정되지 않았다는 메시지를 보여줍니다.

 



반응형

해보고 확인한 것을 문서화하여 기록합니다.
최소 일주일에 한번 이상 포스트를 하려고 노력중입니다.

부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
시간날때 마다 이전 포스트가 문제 있는지 확인을 해보려고 노력하고 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


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

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

댓글을 달아 주세요

">