django 011 | Form

14209 단어 djangodjango

Form 실습

=> form을 사용하면 저번에 사진 파일 칸 추가하느라 views, urls, 다 바꿨던 귀찮은 경험 하지 않을 수 있다

=> 더불어 유효성 검사도 할 수 있음

  1. blog 앱에 forms.py 파일을 만들어준다
from django import forms
from .models import blog
class blogform(forms.ModelForm):
    class Meta : #내가 아래에 있는 필드들 적절히 연결해주겟다~
        model=blog
        fields=['title', 'writer', 'body', 'image']
        #필드에서 내가 원하는 아이들만 pick해서 blogForm으로 해주겟당~
  1. views.py에 blogform import 해주기

from .forms import blogform

  1. views.py 수정 계속 & new.html 수정
  • 기존 new 함수는 new.html 가져오는 애였다면 이제는 form도 넘겨주기~
def new(request):
    form=blogform()
    return render(request, 'new.html',{form : form})
  1. new.html 수정
  • 기존 new.html
    <form action ="{% url 'create' %}" method="post" enctype="multipart/form-data">
        {% csrf_token %} 
        제목 : <input type="text" name="title"><br><br>
        작성자 : <input type="text" name="writer"><Br><br>
        본문 : <textarea name="body" id="" cols="30" rows="10"></textarea><br>
        사진 : <input type="file" name="image">
        <br><button type="submit">저장하기</button>
    </form>
  • 수정 후 html
     <form action ="{% url 'create' %}" method="post" enctype="multipart/form-data">
      {% csrf_token %} 
    {{form}}
    {% endblock %}
       </form>

이렇게 하고 new.html 서버 돌려보면

  1. 이를 p 태그에 감싸서 보내준다면
      {{form.as_p}}


가지런하게 나온다

(+) table로 감싸기도 가능 ㅇㅇ

        <table>
      {{form.as_table}}
    </table>
  1. 아까 만든 복잡한 create 내의 blogform도 고쳐주기 가능
  • 기존 create form
def create(request): #new.html에서 오는 정보를 받아줘야 함
    new_blog=blog()
    new_blog.title=request.POST['title']
    new_blog.writer=request.POST['writer']
    new_blog.body=request.POST['body']
    new_blog.pub_date=timezone.now()
    new_blog.image=request.FILES['image']
    new_blog.save()
    return redirect('detail', new_blog.id)
  • 수정
def create(request): #new.html에서 오는 정보를 받아줘야 함
    form=blogform(request.POST, request.FILES)
    if form.is_valid: #유효성 검사
        new_blog=form.save(commit=False)
        #blogform엔 pub_date가 들어가지 않는데그냥 냅둔다면 빈칸으로 쌓일거기 때문에
        #commit false로 임시저장 시캬노코 pubdate 추가해야함
        new_blog.pubdate=timezone.now()
        new_blog.save() #pub도 추가했으니 최종 저장
        return redirect('detail', new_blog.id)
    return redirect('home') #form 유효안하면 home으로

좋은 웹페이지 즐겨찾기