플러그인 기초¶
플러그인이란?¶
플러그인은 기존의 기능을 확장하거나 새로운 기능을 추가할 수 있으며, 사용자가 직접 제작할 수 있는 기능입니다.
플러그인 구조¶
plugin/
└─ {플러그인 이름1}
└─ admin/
├─ __init__.py
├─ ...
└─ static/
├─ css/
├─ img/
└─ js/
└─ templates/
├─ admin/
├─ ...
└─ user/
├─ __init__.py
├─ ...
├─ models.py
├─ plugin_config.py
├─ readme.txt
└─ screenshot.png
└─ {플러그인2}
...
├─ __init__.py
└─ plugin_states.json
admin/¶
관리자 페이지를 구성하는 router 파일들을 모아놓은 폴더입니다.
__init__.py¶
관리자 페이지의 router와 메뉴를 등록하는 함수를 모아놓은 파일입니다.
static/¶
플러그인에서 사용하는 css, js, 이미지 등 정적 파일들을 모아놓은 폴더입니다.
templates/¶
플러그인에서 사용하는 템플릿 파일들을 모아놓은 폴더입니다.
admin/¶
관리자 페이지에서 사용하는 템플릿 파일들을 모아놓은 폴더입니다.
user/¶
사용자 페이지를 구성하는 router 파일들을 모아놓은 폴더입니다.
__init__.py¶
사용자 페이지의 router를 등록하는 함수를 모아놓은 파일입니다.
models.py¶
플러그인에서 사용하는 DB 테이블 모델을 정의하는 파일입니다.
plugin_config.py¶
플러그인의 설정을 정의하는 파일입니다. 사용자와 관리자 url 주소 접두사, 템플릿경로, 관리자메뉴, 플러그인 모델이름 변수가 있습니다.
readme.txt¶
플러그인 제작자, 버전 등 설명 파일입니다.
screenshot.png¶
플러그인 관리자에 표시할 스크린샷 파일입니다.
플러그인 동작¶
main.py
# 플러그인 라우터 우선 등록
plugin_states = read_plugin_state()
import_plugin_by_states(plugin_states)
register_plugin(plugin_states)
register_statics(app, plugin_states)
cache_plugin_state.__setitem__('info', plugin_states)
cache_plugin_state.__setitem__('change_time', get_plugin_state_change_time())
cache_plugin_menu.__setitem__('admin_menus', register_plugin_admin_menu(plugin_states))
Tip
uvicorn 실행 시 시작되는 파일은 main.py 입니다.
플러그인의 동작 순서.¶
plugin_states.json파일을 읽어 등록된 플러그인들의 상태를 확인합니다.- 플러그인 활성화 상태(
is_enable)가True인 경우, 해당 플러그인의 파이썬 파일들을 임포트 합니다.
Warning
plugin_states.json파일은 관리자에서 플러그인 설정 시 자동생성됩니다. 임의로 수정하지 마시길 바랍니다.- 플러그인의
__init__.py파일 내 register_plugin 함수에 등록된 함수들을 실행합니다. - 플러그인의 router를 등록합니다.
- 플러그인 활성화 상태(
- 플러그인의 static 폴더를 등록합니다.
- 플러그인 등록 시간, 관리자 메뉴를 캐시에 저장합니다.