반응형
SMALL
폼 (Form)
- 사용자가 입력한 데이터를 서버로 전송하기 위한 방식
- 포스트 작성, 수정, 삭제 기능
GET : 서버로부터 데이터 조회
POST : 서버의 데이터를 변경
Create
from django import forms
class PostForm(forms.Form):
title=forms.CharField(max_length=50,label='제목')
content=forms.CharField(label='내용',widget=forms.Textarea)
forms.py에 model과 비슷하게 원하는 데이터에 따라서 form field를 작성
views.py에서 템플릿으로 보내주고
html파일에 템플릿으로 가져와서 사용
Post
action은 폼을 전달할 서버의 URL (action을 적지않을 경우, 현재의 URL로 전송 )
method는 폼 데이터를 담아서 서버에 전송할떄 어떤방식으로 전송할지 적어줌
{% csrf_token %} 교차사이트 위조검증 , form 처리를 할 떄에는 django가 제공하는 이 템플릿 사용함
def post_create(request):
if request.method=='POST':
title=request.POST['title']
content=request.POST['content']
new_post=Post(
title=title,
content=content
)
new_post.save()
return redirect('post-detail',post_id=new_post.id)
else: #GET
post_form=PostForm()
return render(request,'posts/post_form.html',{'form':post_form})
method가 POST일 때, GET일 떄 각각 처리해줌
POST일 경우, title과 content를 받아와서 새로운 데이터를 저장
GET일 경우, 처음 시작하는 경우이니 PostForm을 실행시킴
모델 폼
Django에서 모델을 기반으로 자동으로 폼을 생성하는 기능
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model=Post
fields=['title','content']
fields에 폼으로 만들 필드만 적어줌
모든 필드를 폼으로 만들 경우 fields='__all__'
def post_create(request):
if request.method=='POST':
post_form=PostForm(request.POST)
new_post=post_form.save()
return redirect('post-detail',post_id=new_post.id)
else: #GET
post_form=PostForm()
return render(request,'posts/post_form.html',{'form':post_form})
post_create 도 그에 맞게 바꿔줌
모델폼은 django의 강력한 기능!!
Update
def post_update(request,post_id):
post=Post.objects.get(id=post_id)
if request.method=='POST':
post_form=PostForm(request.POST,instance=post)
if post_form.is_valid():
post_form.save()
return redirect('post-detail',post_id=post.id)
else:
post_form=PostForm(instance=post)
return render(request, 'posts/post_form.html',{'form':post_form})
request.method=='POST'일 경우 post_form을 가져오고 다시 저장, 즉 수정이 된 경우 해당
else인 경우,PostForm(instance=post) 포스트 데이터가 폼에 바운드된 상태로 폼이 만들어짐
기존 글 그대로 다시 보내줌
Delete
def post_delete(request, post_id):
post=Post.objects.get(id=post_id)
if request.method=='POST':
post.delete()
return redirect('post-list')
else:
return render(request,'posts/post_confirm_delete.html',{'post':post})
반응형
LIST
'Web 공부 > Django' 카테고리의 다른 글
Form에 CSS 적용 (0) | 2022.03.29 |
---|---|
유효성 검사 (Validation) (0) | 2022.03.29 |
Django URL naming (0) | 2022.03.25 |
Django CRUD (0) | 2022.03.25 |
Django admin 페이지에서 줄바꿈 문제 해결 breaksbr (0) | 2022.03.25 |