Python: 대화형 쉘 및 쉘 컨텍스트 프로세서 데코레이터.
그만큼
$ flask shell
command는 애플리케이션 데이터를 탐색할 수 있는 Python 대화형 명령 프롬프트를 시작합니다. 링크Command Line Interface에서 인용하려면:
To explore the data in your application, you can start an interactive Python shell with the shell command. An application context will be active, and the app instance will be imported.
...
Use shell_context_processor() to add other automatic imports.
이 짧은 게시물에서는 shell_context_processor() 데코레이터와 "플래시 셸"명령과 함께 작동하는 방식에 초점을 맞춥니다.
이 게시물의 코드는 이 게시물을 위해 생성된 코드Python: Flask-RESTX and the Swagger UI automatic documentation.를 기반으로 합니다. 이 코드는 다음을 사용하여 GitHub에서 복제할 수 있습니다.
E:\>git clone -b v1.0.0 https://github.com/behai-nguyen/flask-restx-demo.git
요약하면 위의 git 클론에서 프로젝트의 레이아웃은 다음과 같습니다. -- ☆은 이 게시물에 대해 업데이트할 파일을 표시합니다.
f:\flask_restx_demo
|
|-- .env
|-- app.py ☆
|-- setup.py
|
|-- src\
| |
| |-- flask_restx_demo\
| |
| |-- __init__.py
| |-- config.py
| |
| |-- api\
| | |
| | |-- __init__.py
| | |
| | |-- trees\
| | |
| | |-- bro.py
| | |-- dto.py
| | |-- routes.py
| | |-- __init__.py
| |
| |-- models\
| |
| |-- tree.py
|
|-- venv\
Updated file f:\flask_restx_demo\app.py
"""Flask Application entry point."""
from flask_restx_demo import (
create_app,
db,
)
app = create_app()
@app.shell_context_processor
def shell():
return {
"db": db,
}
이 게시물의 전체 코드는 다음을 사용하여 GitHub에서 다운로드할 수 있습니다.
E:\>git clone -b v1.0.1 https://github.com/behai-nguyen/flask-restx-demo.git
기본적으로 db 개체를 가져오고 @app.shell_context_processor 데코레이터를 통해 Python 대화형 셸에서 사용할 수 있도록 합니다. 쉼표( , )로 구분하여 쉘에서 사용할 수 있게 하려는 모든 객체를 차례로 나열합니다. 방법이 다음과 같을 필요는 없습니다.
def shell():
우리가 원하는대로 이름을 지정할 수 있습니다. 오랫동안 의미가 있습니다. 중요한 것은 @app.shell_context_processor 데코레이터입니다.
❶ 이제 다음을 사용하여 Python 대화형 셸을 열어볼 수 있습니다.
(venv) F:\flask_restx_demo>venv\Scripts\flask.exe shell
우리는 다음을 얻을 것입니다:
Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] on win32
App: flask-restx-demo [development]
Instance: F:\flask_restx_demo\instance
>>>
❷ Command Line Interface의 이전 인용문을 기억하십니까?
An application context will be active, and the app instance will be imported.
앱 개체를 사용할 수 있을 것으로 예상합니다.
>>> print( app )
우리는 다음을 얻어야 합니다:
<Flask 'flask-restx-demo'>
>>>
❸ db 개체를 살펴보겠습니다.
>>> print( db )
이것은 내 구성의 출력입니다.
<SQLAlchemy engine=sqlite:///F:\flask_restx_demo\flask_restx_demo.db>
>>>
❹ 다른 Python 대화형 셸과 마찬가지로 대화형 방식으로 db 개체를 사용할 수도 있습니다.
>>> conn = db.engine.connect()
>>> res = conn.execute( 'select * from tree' )
>>> for r in res:
... print( r )
... press Enter key
전체 트리 테이블을 인쇄합니다.
(1, 'Acer palmatum', 'Japanese maple', 'https://en.wikipedia.org/wiki/Acer_palmatum')
(2, 'Liquidambar', 'Sweetgums', 'https://en.wikipedia.org/wiki/Liquidambar')
(3, 'Lagerstroemia', 'Crepe myrtle', 'https://en.wikipedia.org/wiki/Lagerstroemia')
(4, 'Pinus Thunbergii', 'Black Pine', 'https://en.wikipedia.org/wiki/Pinus_thunbergii')
(5, 'Pinus parviflora', 'Japanese White Pine', 'https://en.wikipedia.org/wiki/Pinus_parviflora')
>>>
❺ Synology DS218 상자에서 동일한 응용 프로그램을 실행했습니다. Windows 10 Pro 환경과 다르지 않습니다.
(venv) behai@omphalos-nas-01:/var/services/web/flask_restx_demo$ sudo venv/bin/flask shell
Python 3.9.6 (default, Jan 5 2022, 15:50:31)
[GCC 8.5.0] on linux
App: flask-restx-demo [development]
Instance: /volume1/web/flask_restx_demo/instance
그 다음에:
>>> conn = db.engine.connect()
>>> res = conn.execute( 'select * from tree' )
>>> for r in res:
... print( r )
... press Enter key
이 환경의 트리 테이블에는 레코드가 하나만 있습니다.
(1, 'Acer Buergerianum', 'Trident Maple', 'https://en.wikipedia.org/wiki/Acer_buergerianum')
>>>
❻ 대화형 셸을 종료하려면:
>>> exit()
Python virtualenv 프롬프트로 돌아갑니다.
이 게시물의 전체 코드는 다음을 사용하여 GitHub에서 다운로드할 수 있습니다.
E:\>git clone -b v1.0.1 https://github.com/behai-nguyen/flask-restx-demo.git
이러한 작은 추가를 위해 우리는 매우 풍부한 기능을 가지고 있습니다... 저는 이 기능이 매우 매력적이라고 생각합니다. 이 게시물이 어떤 식으로든 도움이 되기를 바랍니다. 그리고 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(Python: 대화형 쉘 및 쉘 컨텍스트 프로세서 데코레이터.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/behainguyen/python-interactive-shell-and-shell-context-processor-decorator-3o0a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)