Web 공부/Django

폼(Form)

sumiin 2022. 3. 29. 01:29
반응형
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