Skip to content

플러그인 기초

플러그인이란?

플러그인은 기존의 기능을 확장하거나 새로운 기능을 추가할 수 있으며, 사용자가 직접 제작할 수 있는 기능입니다.

플러그인 구조

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 입니다.

플러그인의 동작 순서.

  1. plugin_states.json 파일을 읽어 등록된 플러그인들의 상태를 확인합니다.
    • 플러그인 활성화 상태(is_enable)가 True 인 경우, 해당 플러그인의 파이썬 파일들을 임포트 합니다.

    Warning

    plugin_states.json파일은 관리자에서 플러그인 설정 시 자동생성됩니다. 임의로 수정하지 마시길 바랍니다.

    • 플러그인의 __init__.py 파일 내 register_plugin 함수에 등록된 함수들을 실행합니다.
    • 플러그인의 router를 등록합니다.
  2. 플러그인의 static 폴더를 등록합니다.
  3. 플러그인 등록 시간, 관리자 메뉴를 캐시에 저장합니다.