- 글 수정
<a href="/board/board_main?board_info_idx={{board_info_idx}}&content_idx={{content_idx}}&page_num={{page_num}}" class="btn btn-primary">목록보기</a>
<a href="/board/board_modify?board_info_idx={{board_info_idx}}&content_idx={{content_idx}}&page_num={{page_num}}" class="btn btn-info">수정하기</a>
<a href="/board/board_delete?board_info_idx={{board_info_idx}}&content_idx={{content_idx}}&page_num={{page_num}}" class="btn btn-danger">삭제하기</a>
def board_modify(request) :
# 파라미터 데이터를 추출합니다.
board_info_idx = request.GET['board_info_idx']
content_idx = request.GET['content_idx']
page_num = request.GET['page_num']
# 현재 글 정보를 가져옵니다.
content_model = board_app.models.ContentTable.objects
content_model = content_model.select_related('content_writer_idx', 'content_board_idx')
content_model = content_model.get(content_idx=content_idx)
template = loader.get_template('board_modify.html')
render_data = {
'board_info_idx' : board_info_idx,
'content_idx' : content_idx,
'page_num' : page_num,
'content_model' : content_model,
}
return HttpResponse(template.render(render_data, request))
- 데이터 읽어오기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>미니 프로젝트</title>
<!-- Bootstrap CDN -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
{% include 'top_menu.html' %}
<div class="container" style="margin-top:100px">
<div class="row">
<div class="col-sm-3"></div>
<div class="col-sm-6">
<div class="card shadow">
<div class="card-body">
<form action="board_modify.html" method="post">
<div class="form-group">
<label for="board_writer_name">작성자</label>
<input type="text" id="board_writer_name" name="board_writer_name" class="form-control" value="{{content_model.content_writer_idx.user_name}}" disabled="disabled"/>
</div>
<div class="form-group">
<label for="board_date">작성날짜</label>
<input type="text" id="board_date" name="board_date" class="form-control" value="{{content_model.content_date|date:'Y-m-d'}}" disabled="disabled"/>
</div>
<div class="form-group">
<label for="board_subject">제목</label>
<input type="text" id="board_subject" name="board_subject" class="form-control" value="{{content_model.content_subject}}"/>
</div>
<div class="form-group">
<label for="board_content">내용</label>
<textarea id="board_content" name="board_content" class="form-control" rows="10" style="resize:none">{{content_model.content_text}}</textarea>
</div>
<div class="form-group">
<label for="board_file">첨부 이미지</label>
{% if content_model.content_file %}
<img src="{{content_model.content_file.url}}" width="100%"/>
{% endif %}
<input type="file" name="board_file" id="board_file" class="form-control" accept="image/*"/>
</div>
<div class="form-group">
<div class="text-right">
<button type="submit" class="btn btn-primary">수정완료</button>
<a href="board_read.html" class="btn btn-info">취소</a>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-sm-3"></div>
</div>
</div>
{% include 'bottom_info.html' %}
</body>
</html>
- 글 수정에서 취소 버튼
<a href="/board/board_read?board_info_idx={{board_info_idx}}&content_idx={{content_idx}}&page_num={{page_num}}" class="btn btn-info">취소</a>
- 수정 완료 처리
- 글 쓰는 페이지 처리와 비슷합니다.
- board_app/templates/board_modify의 form 태그의 action을 /board/board_modify_result로 세팅합니다.
- csrf 토큰도 설정합니다.
<form action="/board/board_modify_result" method="post" enctype="multipart/form-data">
{% csrf_token %}
- board_app/urls.py에 board_modify_result 주소를 등록합니다.
from django.urls import path
from . import views
from django.urls import include
urlpatterns = [
path('board_main', views.board_main, name='board_main'),
path('board_modify', views.board_modify, name='board_modify'),
path('board_read', views.board_read, name='board_read'),
path('board_write', views.board_write, name='board_write'),
path('board_write_result', views.board_write_result, name='board_write_result'),
path('board_modify_result', views.board_modify_result, name='board_modify_result'),
]
- board_app/views.py 에 board_modify_result 함수를 만들고 수정처리를 합니다.
- views.py에서 처리하기 위해 필요 데이터를 넘깁니다.
<input type="hidden" name="board_info_idx" value="{{board_info_idx}}"/>
<input type="hidden" name="content_idx" value="{{content_idx}}"/>
<input type="hidden" name="page_num" value="{{page_num}}"/>
@csrf_exempt
def board_modify_result(request) :
# 파라메터 추출
board_info_idx = request.POST['board_info_idx']
print("board_info_idx" + board_info_idx)
content_idx = request.POST['content_idx']
content_subject = request.POST['board_subject']
content_text = request.POST['board_content']
page_num = request.POST['page_num']
content_file = request.FILES.get('board_file')
# 수정하고자 하는 글 정보를 가져옵니다.
content_model = board_app.models.ContentTable.objects.get(content_idx=content_idx)
# 정보를 세팅합니다.
content_model.content_subject = content_subject
content_model.content_text = content_text
if content_file :
content_model.content_file = content_file
# 저장합니다.
content_model.save()
message = f'''
<script>
alert('수정되었습니다')
location.href = '/board/board_modify?board_info_idx={board_info_idx}&page_num={page_num}&content_idx={content_idx}'
</script>
'''
return HttpResponse(message)