8. 게시판 기능 구현
(3) GET vs POST (C)
def write(request):
if request.method == "GET":
return render(request, 'write_form.html')
if request.method == "POST":
memoContent = request.POST['memoContent']
article = Memo(description = memoContent)
article.save()
return HttpResponseRedirect(reverse('main'))
(4) U, D
def modify(request, idx):
if request.method == "GET":
article = Memo.objects.get(id = idx)
data = {'article' : article}
return render(request, 'modify_form.html', data)
if request.method == "POST":
memoContent = request.POST['memoContent']
db_article = Memo.objects.get(id = idx)
db_article.description = memoContent
db_article.save()
return HttpResponseRedirect(reverse('main'))
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메모 작성 폼</title>
<style>
form > label{
display: inline-block;
width: 120px;
}
form > input {
padding: 4px;
margin-bottom: 4px;
}
</style>
</head>
<body>
<h1>메모 수정 폼</h1>
<form action="./{{article.id}}" method="POST" id="memoModifyForm">
{% csrf_token %}
<input type="hidden" name="idx" value="{{article.id}}">
<label for="memo">메모 입력</label>
<input type="text" id="memo" name="memoContent" size="100" placeholder="내용을 입력하세요" value="{{article.description}}" autocomplete="false">
<button type="submit" form="memoModifyForm">메모 등록</button>
</form>
</body>
</html>
def delete(request, idx):
db_article = Memo.objects.get(id = idx)
db_article.delete()
return HttpResponseRedirect(reverse('main'))
(개인적) Java + Spring Boot + JPA와의 비교
- 환경, 설정 관련
- Spring : application.yml 파일 + 코드로 Bean을 설정하는 방식
- Django : 코드로 설정하는 방식 (위의 두 가지를 .py로 합친 느낌)
- 계층 관련
- Spring : Controller <-> Service <-> Repository가 명확히 구분된 느낌
- Controller : @Controller 애노테이션 클래스
- Service : @Service 애노테이션 클래스
- Repository : @Repostiory 애노테이션 클래스
- 사실 Controller에서 바로 Repostiory 접근도 가능하긴 하다 권장되지 않을 뿐
- Django : Controller <-> Service + Repository 느낌 (물론 더 쪼갤 수 있으면 쪼갤 수 있을 것 같음... 기본 강의만 본 것이니)
- 요청에 대한 URL 매핑은 urls.py에서 진행 (Controller의 @RequestMapping)
- 요청 + URL에 대한 비즈니스 로직 처리는 views.py에서 진행 (Service의 비즈니스 로직. 여기서 별도의 Repository는 필요하지 않음)
- 템플릿 관련
- 문법 간 약간의 차이만 있을 뿐 느낌은 똑같은 것 같음
(번외) 참고사항
- 테스트를 해보니 DB 데이터가 변경될 때마다 db.sqlite3 파일도 수정이 되고 있음