반응형

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

 



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts