Dash Callback State 함수
Dash 콜백 함수에서 State는 콜백을 트리거하지 않지만 콜백 함수 내에서 사용되는 컴포넌트의 현재 상태(값)를 전달하는 데 사용됩니다. Input과 달리 State는 콜백을 활성화하지 않지만, 콜백이 실행될 때 컴포넌트의 최신 상태를 제공합니다.
@app.callback(
Output('edit', 'is_open'),
[Input("edit_open", "n_clicks"), Input("edit_close",
"n_clicks"), Input("edit_set", "n_clicks")],
[State('edit', 'is_open'), State('edit_i_id', 'value'), State('edit_b_id', 'value'),
State('edit_i_group', 'value'), State('edit_question','value'), State('edit_as_type', 'value'),
State('edit_cl_type', 'value'), State('edit_button_label','value'), State('edit_url', 'value'),
State('edit_i_desc', 'value'), State('edit_yn', 'value'), State('edit_answer', 'value')]
)
def toggle_modal_edit(n1, n2, n3, is_open, edit_i_id, edit_b_id, edit_i_group, edit_question,
edit_as_type, edit_cl_type, edit_button_label, edit_url,
edit_i_desc, edit_yn, edit_answer):
if n1 or n2 or n3: # 순서대로 '1버튼' '2버튼', '3버튼'
if n3: # '3버튼' 버튼 클릭 시
if not edit_question.strip() or not edit_answer.strip():
raise PreventUpdate("Question and answer cannot be empty.")
# 데이터베이스 연결
engine = create_engine(get_db_info())
with engine.connect() as connection:
# 데이터베이스에 추가하는 쿼리 실행
query = text(f"""
UPDATE bdb.test_set
SET brand_id = '{edit_b_id}',
intent_group = '{edit_i_group}',
question = '{edit_question}',
answer_type = '{edit_as_type}',
call_type = '{edit_cl_type}',
button_label = '{edit_button_label}',
url_call = '{edit_url}',
intent_desc = '{edit_i_desc}',
use_yn = '{edit_yn}',
answer = '{edit_answer}'
WHERE i_id = '{edit_i_id}'
""")
result = connection.execute(query)
connection.commit()
return not is_open
return is_open
State('modal_edit', 'is_open'): modal_edit 컴포넌트의 is_open 상태를 나타냅니다. 이것은 모달이 열려있는지 닫혀있는지를 나타내는 불리언 값입니다. 이 상태는 콜백 내에서 모달의 현재 상태를 파악하고 적절하게 토글(열기/닫기)하기 위해 사용됩니다.
State('modal-edit_i_id', 'value') 등의 다른 State: 이들은 각각 해당하는 입력 필드(예: i_ID, b_ID, i_그룹 등)의 현재 값을 나타냅니다. 사용자가 이 필드들에 입력한 데이터는 콜백 함수에서 데이터베이스 업데이트 쿼리를 구성하는 데 사용됩니다.
-> edit_i_id, edit_b_id, edit_i_group 등의 값은 데이터베이스 쿼리에서 사용됩니다. 이 값들은 사용자가 입력한 내용을 기반으로 데이터베이스의 특정 레코드를 업데이트하는 데 필요합니다.
if not edit_question.strip() or not edit_answer.strip(): edit_question과 edit_answer의 값은 사용자가 입력한 질문과 대답을 나타냅니다. 이들은 데이터베이스에 저장되기 전에 공백 여부를 검사하는 데 사용됩니다.
이 콜백은 세 개의 Input ("edit_open", "edit_close", "edit_set" 버튼 클릭)을 감지하여 작동합니다. 이 중 어느 것이든 클릭되면 함수가 트리거됩니다. 그런 다음, 함수는 현재 모달의 상태(is_open)와 다른 입력 필드의 값들을 확인하여 로직을 수행합니다. 예를 들어, "edit_set" (수정하기 버튼)이 클릭되면, 입력 필드에서 받은 데이터를 검증하고, 해당 데이터로 데이터베이스를 업데이트합니다.
State를 사용하는 주된 이유는 콜백이 트리거될 때 필요한 추가 정보를 제공하기 위함입니다. 여기서는 사용자 입력을 기반으로 데이터베이스 업데이트 로직을 실행하는 데 필요한 정보들이 State로부터 제공됩니다.
'개발 > Dash' 카테고리의 다른 글
[Dash]Python Dash Callback (4) 동적 데이터베이스 업데이트 및 복원 (0) | 2024.02.13 |
---|---|
[Dash]Python Dash Callback (3) 팝업창에 경고 메시지 띄우기 + 콜백 합치기 (0) | 2024.01.17 |
[Dash]Python Dash Callback (1) 콜백 트리거 속성 (0) | 2024.01.16 |
[Dash]Python Dash Layout 구성 (3) feat. Dash AG Grid (0) | 2024.01.15 |
[Dash]Python Dash Layout 구성 (2) feat. dash_core_components (0) | 2024.01.15 |