urls.py
from django.conf.urls.static import static
from django.conf import settings
from . import views
urlpatterns = [
path('program/pimgdelete/', views.pimgdelete, name='pimgdelete'),
]
views.py
def pimgdelete(request):
pk = request.POST.get('pk')
fieldname = request.POST.get('fieldname')
if pk is None:
result = HttpResponse('pk is nothing')
elif fieldname is None:
result = HttpResponse('fieldname is nothing')
else:
my_object = Program.objects.filter(pk=pk)
obj = my_object[0]
# 파일의 실제 위치 검색
file_path = os.path.join(settings.MEDIA_ROOT, str(getattr(obj, fieldname, '')))
if os.path.exists(file_path):
# 파일 삭제
os.remove(file_path)
# 파일 필드 초기화
setattr(obj, fieldname, None)
# DB 저장
obj.save()
result = HttpResponse('Y')
else:
result = HttpResponse('file path error')
return result
program.html
// 폼 안에 {% csrf_token %} 를 작성해야한다.
// 페이지 뷰에서 보낸 program_data의 pk와 DB 테이블의 항목명을 파라미터로 보낸다.
function del_img(){
const csrfToken = document.getElementsByName('csrfmiddlewaretoken')[0].value;
$.ajax({
type: "POST",
url: "{% url 'csadmin:pimgdelete' %}",
headers: { 'X-CSRFToken': csrfToken },
data: {pk:{{program_data.pk}}, fieldname:'pimg'},
cache: false,
datatype: "JSON",
success: function(data, textStatus, xhr){
console.log(data);
if(data == 'Y'){ location.reload(); }
else{ alert(data); }
}
});
}
'웹 개발 이야기 > django' 카테고리의 다른 글
[django] Tag (manytomany) (1) | 2023.05.12 |
---|---|
[django] input[type=file] 을 이용하여 첨부한 파일 저장 (0) | 2023.05.11 |
[django] Google Mail 보내기 (0) | 2023.05.09 |
[django] queryset.filter not 사용 방법 (0) | 2023.05.09 |
[django] pagination (1) | 2023.05.09 |
댓글