플러그인 기초¶
플러그인이란?¶
플러그인은 기존의 기능을 확장하거나 새로운 기능을 추가할 수 있으며, 사용자가 직접 제작할 수 있는 기능입니다.
플러그인 구조¶
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 폴더를 등록합니다.
- 플러그인 등록 시간, 관리자 메뉴를 캐시에 저장합니다.