플라스크 정지 API: 플라스크 기반

이 문장의 작업 원리

  • 이 글은 일련의 글의 일부입니다. 이 글은 제가 Python과 Flask를 사용하여 RESTAPI를 만드는 방법을 분석했습니다.
  • 모든 문장은 독자가 이 시리즈 이전의 모든 문장을 읽고 이해했다고 가정한다.
  • 나는 길에서 한 모든 선택을 설명해 보려고 한다.만약 내가 무엇을 빠뜨렸다고 생각한다면 아래의 평론에서 언급해 주십시오.
  • 각 절은 왜 특정한 기술을 어떻게 사용하는지 설명한다.익숙한 부분을 마음대로 뛰어넘으세요.
  • 이 시리즈에 생성된 소스 코드는 GitHub에서 찾을 수 있습니다.
  • dbanty 회사 / python rest


    기본 플라스크 REST API의 예 항목 표시


    안녕하세요.내가 이 환매 협의를 만든 것은 플라스크를 추적하기 위해서였지만, 나는 아직 완성하지 않았고, 영원히 완성하지 못할 것이다.실제로 Python RESTAPI를 만드는 진정한 아름다움을 얻기 위해 당신도 이렇게 하는 것을 건의합니다.
    View on GitHub

    이 댓글에.


    이 글은 공장 모드를 이용하여 매우 간단한 플라스크 프로그램을 만드는 방법을 소개했다.그리고pytest의 테스트 구동 개발을 통해 청사진에 간단한 건강검진 컨트롤러를 만듭니다.본고의 마지막 부분에서 당신은 매우 간단한 웹 서버를 가지고 있습니다. 이것은 완전한 테스트 커버율을 가지고 있습니다!

    주제:

  • 플라스크 공장 모델
  • 문서 열
  • 유형 메모
  • 테스트 구동 개발
  • pytest
  • 플라스크 청사진
  • 플라스크 공장 모드


    전체 Flask는 Flask 응용 프로그램 대상을 중심으로 Flask를 사용하기 시작하는 첫 번째 일은 프로젝트의 어느 곳에서 이 대상 중 하나를 만드는 것입니다.당신은 강좌에서 두 가지 흔히 볼 수 있는 방법을 보게 될 것입니다.
  • 파일 (일반적으로'app.py'라고 함) 에서 대상을 만듭니다. 이 파일은 나중에 서비스를 제공하는 모든 서버에서 가져옵니다.이 방법의 주요 장점은 샘플 파일이 더 적고 빠르게 시작하고 실행할 수 있기 때문에 이것은 강좌의 인기 선택이다.

  • 응용 프로그램의 실례를 되돌려주는 공장 방법을 설명합니다.이 방법은 더 많은 입력이 필요하지만 좋은 점이 많다.
  • 반복적인 의존을 피하기 위해 공장에 가져오는 방법을 지연시킴(확장을 시작할 때 매우 중요함)
  • 지연 확장의 초기화(단위 테스트를 쉽게 수정할 수 있음)
  • 다양한 용도(예: 테스트, 개발 및 생산)를 위한 동적 어플리케이션 구성 가능
  • 자세한 내용은 문서를 참조하십시오here
  • 나는 항상 공장 방법을 사용하자고 건의하는데, 이것은 매우 쉽게 시작된다.먼저 모듈의 기__init__.py에서 창설 방법 자체.
    # python_rest/__init__.py
    from flask import Flask
    
    
    def create_app():
        return Flask(__name__)
    
    이것이 바로 응용 프로그램을 설명하는 데 사용되는 모든 코드입니다!이제 Flask 개발 서버에서만 실행할 수 있습니다.

    명령줄에서 실행


    우리는 명령줄에서 시가가 있는 프로그램을 쉽게 실행할 수 있지만, 우선 Flask가 무엇을 실행해야 하는지 알려야 한다.다행히도 환경 파일에 대한 지원이 내장되어 있어 다양한 내용을 설명할 수 있습니다.우선python-dotenv을 개발 의존항으로 추가한다.
    $ poetry add -D python-dotenv
    
    현재 ".flaskenv"라는 프로젝트 루트 디렉터리에 환경 변수 "FLASK\u APP"를 모듈의 이름으로 설정하는 파일을 만듭니다.

    Note: The Flask recommendation is to check the ".flaskenv" file into the project with any non-sensitive, default values. You can then override them with the more standard ".env" file which should never be checked into source control.


    # .flaskenv
    FLASK_APP=python_rest
    
    이제 개발 서버를 실행할 수 있습니다.네가 시 아래에서 그것을 운행할 것을 확보해라!
    $ poetry run flask run
    

    Py Charm 입고 달리기.

  • 화면 상단에서 구성 추가
  • 를 클릭합니다.
  • +
  • 를 클릭합니다.
  • Flask server 선택
  • 대상 유형을 모듈 이름으로 설정
  • "Target"을 모듈 이름으로 설정(예: "python\urest")
  • 확인
  • 을 클릭합니다.
  • 새 구성을 선택한 후 녹색 화살표를 클릭하여 실행
  • 🎉 대단히 좋다현재 로컬 시스템의 포트 5000(기본값)에 웹 서버가 실행되고 있습니다!그것은 아직 아무 일도 하지 않았지만, 나는 그것이 운행하고 있다고 보증한다.

    문서 문자열


    Python 함수를 작성했으니 이 함수를 위해 docstring을 작성해야 합니다.코드 문서를 작성하는 이유는 무궁무진하다. 나는 모든 함수에docstring을 하나 주는 것이 가장 좋다는 것을 발견했다. 그 중에는 적어도 몇 개의 단어의 요약이 포함되어 있다.docstring은 앞으로 당신의 API를 위해 좋은 문서를 만드는 데 매우 중요하기 때문에 즉시 습관을 들이는 것이 가장 좋습니다.
    DocString에는 많은 형식이 있으며 대부분 PyCharm에서 지원되며 PyCharm에서 사용할 수 있습니다.This page 서로 다른 형식을 잘 개술하였다.StructuredText 문자열을 사용합니다. 다른 종류의 프로젝트에서 사용하는 Sphinx 본기에서 지원하기 때문입니다.그것들은 이렇게 보인다.
    def create_app():
        """
        Creates an application instance to run
        :return: A Flask object
        """
        return Flask(__name__)
    

    유형 주석


    나는 내가 유형 주석이 얼마나 중요하다고 생각하는지 강조할 수 없다.파이썬의 동적 입력 시스템은 매우 좋아서 코드를 매우 빨리 작성할 수 있다.그러나 프로젝트가 더욱 복잡해지면서 간단한 실수를 하기 쉽습니다.나는 hint의 모든 것을 입력했다. 이렇게 하면PyCharm은 내가 어리석은 일을 할 때 나에게 (예를 들어 어딘가의 귀환을 잊어버리고) 정적 분석 도구(예를 들어 mypy)로 흔히 볼 수 있는 버그를 포착할 수 있다.create_app 함수의 유형 설명은 다음과 같습니다.
    def create_app() -> Flask:
    

    테스트 구동 개발


    테스트 드라이브 개발(TDD)은 매우 간단하다. 바로 코드를 작성하기 전에 코드를 작성하는 테스트를 하는 것이다.많은 책들이 왜 이것이 좋은 생각인지 쓰고 있지만, 간단하다. 이것이 바로 내가 왜 이렇게 하는 이유이다.
  • 너는 항상 언제 완성할지 안다
  • 더욱 자신 있게 재구성할 수 있음
  • 시작하기 전에 가장자리 상황과 불쾌한 길을 생각하도록 도와줍니다
  • 모듈화 및 결합 설계 장려
  • Pytest 회사


    테스트를 작성하기 위해서는 어떤 프레임워크를 사용해야 합니다.Python 표준 라이브러리에는'Unittest'라는 라이브러리가 포함되어 있지만, 나는 pytest를 더 좋아한다.그것을 사용하는 데는 여러 가지 이유가 있지만 가장 기본적인 것은 다음과 같다.
  • 매우 작은 템플릿
  • 대규모 커뮤니티 플러그인
  • Flask 응용 프로그램을 테스트할 때 자주 사용하는 플러그인 중 하나는 pytest-flask 입니다. 이것은 일련의 유용한 고정 장치를 제공합니다.테스트를 시작하기 위해pytest와pytestflask를 개발 의존항으로 설치합니다.
    $ poetry add -D pytest pytest-flask
    
    현재 PyCharm을 사용하고 있다면,pytest를 사용하도록 설정해야 합니다
  • 기본 설정 열기
  • 도구 클릭
  • Python 통합 도구로 이동
  • Default test runner를 pytest
  • 로 변경

    Note: you can change Docstring format here too


    다음에,tests 디렉터리에pytest의 프로필 (conftest.py) 을 만듭니다.이 파일은 항상 테스트 실행 전에 가져옵니다. 사용할 기기를 정의하고 다른 테스트 전 설정을 실행합니다.pytestflask를 사용하려면'app'fixture를 정의해야 합니다. 이것은 Flask 대상의 실례를 되돌려줍니다.
    # tests/conftest.py
    
    import pytest
    from flask import Flask
    
    
    @pytest.fixture
    def app() -> Flask:
        """ Provides an instance of our Flask app """
        from python_rest import create_app
    
        return create_app()
    
    

    청사진


    이제 우리가 방문할 수 있는 단점을 만들 때가 되었다.매우 흔히 볼 수 있는 방법은 프로그램이 실행 중인지 확인하기 위해 어떤 건강 검사 단점을 사용하는 것이다.이 단점을 만들기 위해서는 컨트롤러 (요청을 처리하는 함수) 를 만들어야 합니다. 이 컨트롤러는 청사진 (경로 아래의 컨트롤러 집합) 에 등록되고, 청사진은 응용 프로그램 대상에 등록됩니다.
    우선, 새 코드를 어디에 두었는지 찾아내자.나는 주 모듈 아래의 청사진이라는 모듈에서 내가 만든 모든 청사진을 보존하는 것을 좋아한다.이 청사진은 루트 경로 ("/") 를 관리하는 데 사용될 것이기 때문에 "blueprints"모듈의 다음 "root.py"파일에 놓을 것입니다.
    다음으로, "tests/test\u blueprints/test\u root.py"를 만들어서 tests 디렉터리에서 이 디렉터리 구조를 거울로 만들어야 합니다.적당한 __init__.py 파일과 함께 전체 프로젝트 구조는 다음과 같아야 한다.
    python-rest
    |-- README.md
    |-- poetry.lock
    |-- pyproject.toml
    |-- python_rest
    |   |-- __init__.py
    |   `-- blueprints
    |       |-- __init__.py
    |       `-- root.py
    `-- tests
        |-- conftest.py
        `-- test_blueprints
            |-- __init__.py
            `-- test_root.py
    
    곧 생성될 단점을 위한 테스트를 작성합시다.우리는pytestflask가 제공하는 클라이언트 클러치를 사용하여 현지에서 요청을 실행할 수 있습니다.상태 확인이 200(OK) 상태와 일부 JSON 본문으로 되돌아오기를 원합니다.다음은 테스트입니다.
    # tests/test_blueprints/test_root.py
    
    from http import HTTPStatus
    
    
    def test_health(client):
        response = client.get('/health/')
        assert response.status_code == HTTPStatus.OK, 'Health check failed'
        assert response.json == {'message': 'Healthy'}, 'Improper response'
    
    
    이 단언 문장들은 실행할 때 테스트를 통과하거나 실패하는 요소입니다.단언 후 쉼표 뒤에 있는 문자열은 검사에 실패했을 때 표시될 메시지입니다.PyCharm에서 함수 정의 옆에 있는 녹색 작은 화살표를 클릭하거나 명령줄에서 실행poetry run pytest하여 테스트를 실행합니다.어쨌든 너는 그것이 실패하는 것을 보아야 한다.
    이제 루트 청사진과 실제 단점을 만듭니다.
    # python_rest/blueprints/root.py
    
    from flask import Blueprint
    
    # Declare the blueprint with whatever name you want to give it
    root_blueprint = Blueprint('root', __name__)
    
    
     # This is how you register a controller, it accepts OPTIONS and GET methods by default
    @root_blueprint.route('/health/')
    def health():
        return {'message': 'Healthy'}  # This will return as JSON by default with a 200 status code
    
    
    현재, 우리는 이 청사진을 응용 프로그램에 등록해야만 진정으로 컨트롤러에 도달할 수 있다.그들의 방법은 프로그램이 만들어질 때 함수를 호출하여 청사진을 프로그램에 등록하는 것이다.이 함수를'init\u app'이라고 명명하는 것이 관례입니다. 저는'init\u app'함수가 있으면 모든 청사진을 동시에 등록할 수 있기를 바랍니다.논리에 맞는 일은 이 함수를 블루프린트 모듈__init__.py에 넣는 것이다.
    # python_rest/blueprints/__init__.py
    
    from flask import Flask
    
    
    def init_app(app: Flask):
        from .root import root_blueprint
        app.register_blueprint(root_blueprint)
    
    
    현재,create_appfactory 함수에서 이 함수를 호출하기만 하면 됩니다.
    # python_rest/__init__.py
    
    from flask import Flask
    
    
    def create_app() -> Flask:
        """
        Creates an application instance to run
        :return: A Flask object
        """
        app = Flask(__name__)
    
        from . import blueprints
        blueprints.init_app(app)
    
        return app
    
    
    그렇습니다!만약 테스트를 다시 실행한다면, 그것은 지금 통과해야 합니다!flask 응용 프로그램을 실행하고 브라우저에서 localhost:5000/health/ 으로 이동하여 JSON 응답을 볼 수도 있습니다.

    좋은 웹페이지 즐겨찾기