해결된 질문
작성
·
17
0
@blueprint.route("/edit/<idx>", methods=["GET", "POST"])
@login_required
def board_edit(idx):
board = mongo.db.board
try:
doc = board.find_one({"_id": ObjectId(idx)})
except Exception:
doc = None
if not doc:
flash("해당 게시물이 존재하지 않습니다.")
return redirect(url_for("board.lists"))
if str(session.get("id") or "") != str(doc.get("writer_id") or ""):
flash("글 수정 권한이 없습니다.")
return redirect(url_for("board.lists"))
if request.method == "GET":
return render_template("edit.html", data=doc, title="글수정")
# --- POST ---
title = (request.form.get("title") or "").strip()
contents = (request.form.get("contents") or "").strip()
deleteold = "deleteoldfile" in request.form # ✅ 체크박스 감지
old_file = doc.get("attachfile")
filename = old_file
f = request.files.get("attachfile")
if f and f.filename:
base, ext = os.path.splitext(secure_filename(f.filename))
new_name = f"{base}_{int(time.time())}{ext.lower()}"
save_dir = app.config["BOARD_ATTACH_FILE_PATH"]
os.makedirs(save_dir, exist_ok=True)
f.save(os.path.join(save_dir, new_name))
if old_file:
board_delete_attach_file(old_file)
filename = new_name
elif deleteold:
if old_file:
board_delete_attach_file(old_file)
filename = None
update_set = {"title": title, "contents": contents}
if deleteold and filename is None:
board.update_one({"_id": doc["_id"]},
{"$set": update_set, "$unset": {"attachfile": ""}})
else:
update_set["attachfile"] = filename
board.update_one({"_id": doc["_id"]}, {"$set": update_set})
flash("수정되었습니다.")
return redirect(url_for("board.board_view", idx=str(doc["_id"])))
챗지피티의 도움을 받아 작성했습니다. 근데 삭제 기능만 안되는데 왜 안돼는지 모르겠습니다..
답변 2
0
안녕하세요, 성현님.
일단 코드에는 큰 문제는 없어보입니다만 일단 어느 구간에서 문제가 생기는지 의심 구간에 print()
문을 사용하여 변수의 값들을 확인해보는게 좋을듯 합니다.
@blueprint.route("/edit/<idx>", methods=["GET", "POST"])
@login_required
def board_edit(idx):
board = mongo.db.board
try:
doc = board.find_one({"_id": ObjectId(idx)})
except Exception:
doc = None
if not doc:
flash("해당 게시물이 존재하지 않습니다.")
return redirect(url_for("board.lists"))
if str(session.get("id") or "") != str(doc.get("writer_id") or ""):
flash("글 수정 권한이 없습니다.")
return redirect(url_for("board.lists"))
if request.method == "GET":
return render_template("edit.html", data=doc, title="글수정")
# --- POST ---
title = (request.form.get("title") or "").strip()
contents = (request.form.get("contents") or "").strip()
deleteold = "deleteoldfile" in request.form # ✅ 체크박스 감지
print(f"deleteold::{deleteold}") # 디버깅 deleteold 변수값 확인
old_file = doc.get("attachfile")
filename = old_file
f = request.files.get("attachfile")
if f and f.filename:
base, ext = os.path.splitext(secure_filename(f.filename))
new_name = f"{base}_{int(time.time())}{ext.lower()}"
save_dir = app.config["BOARD_ATTACH_FILE_PATH"]
os.makedirs(save_dir, exist_ok=True)
f.save(os.path.join(save_dir, new_name))
if old_file:
board_delete_attach_file(old_file)
filename = new_name
elif deleteold:
print(f">> deleteold <<") # elif 문을 탔는지 체크
if old_file:
print(f"deletefile::{old_file}") # 디버깅 조건문과 변수값 확인
board_delete_attach_file(old_file)
filename = None
update_set = {"title": title, "contents": contents}
if deleteold and filename is None:
board.update_one({"_id": doc["_id"]},
{"$set": update_set, "$unset": {"attachfile": ""}})
else:
update_set["attachfile"] = filename
board.update_one({"_id": doc["_id"]}, {"$set": update_set})
flash("수정되었습니다.")
return redirect(url_for("board.board_view", idx=str(doc["_id"])))
위의 코드에서처럼 기존 파일을 삭제하는 기능이 동작해야할 구간에 print()
함수를 사용하여 변수의 값과 조건문을 타고 있는지 등을 확인하면서 무엇이 문제인지 확인해보는게 좋을듯 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 님의 질문에 도움을 드리기 위해 유사한 상황을 다루는 답변을 찾아보았습니다. 첨부파일 삭제가 제대로 작동하지 않는 문제에 대해 살펴보겠습니다.
삭제 기능이 작동하지 않는 몇 가지 일반적인 원인을 소개해 드리겠습니다:
checkbox의 name 속성과 request.form에서 가져오는 값 확인: 첨부 파일 삭제를 위해 사용된 deleteold
변수가 비어 있거나 잘못된 경우입니다. HTML 폼의 체크박스의 name
속성이 "deleteoldfile"
인지 확인해보세요. HTML에서 정확한 속성이 사용되어야 서버에서 해당 값이 감지될 수 있습니다.
파일 경로 문제: board_delete_attach_file
함수에서 실제 파일 삭제가 이루어지고 있는지 확인해보세요. 올바른 파일 경로가 설정되어 있는지 확인해야 합니다.
데이터베이스 업데이트 오류: update_one
쿼리가 데이터베이스에서 잘못 실행되고 있을 수 있습니다. $unset
를 사용하는 부분이 올바르게 작성되어 있는지 확인하세요.
위 사항들을 확인해 보시고, 문제가 해결되지 않는다면 코드 또는 로그에 있는 오류 메시지를 추가적으로 공유해 주시면 보다 구체적인 문제 해결에 도움이 될 수 있습니다.
비슷한 문제를 다룬 몇 가지 게시물을 소개해 드립니다:
1. 등록된 글 수정시 - 파일 처리 및 데이터베이스 업데이트 관련 힌트를 얻을 수 있습니다.
2. 글 작성 폼에 HTML 에디터 기능 추가하기 이미지 저장 오류 - 파일 저장 관련 부분을 참고해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.