일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트 고득점 Kit
- 백준
- 프로그래밍 언어론
- Java
- useState
- 프로그래머스 자바
- 리액트
- react firebase
- codesandbox
- react hook
- 디자인 패턴
- 자바 공부
- 자바
- vanillaJS
- 장고
- 컴퓨터 네트워크
- 자바스크립트
- JavaScript
- NextJS
- React JS
- 리액트 훅
- 데이터모델링과마이닝
- 프로그래머스
- useEffect
- 코틀린
- react
- websocket
- 프로그래머스 완전탐색
- 코딩테스트 고득점 Kit 완전탐색
- design pattern
Archives
- Today
- Total
기록하는 개발자
[Django] Form 본문
728x90
기존 : html 파일에서 form 태그 안에 input태그를 넣어 데이터 베이스 형식에 맞게 사용했다.
수정 : forms.py를 통해 객체 지향적으로 관리할 수 있다.
forms.py의 장점
- 데이터 베이스의 model이 수정 될 때마다 views.py이나 html 파일들을 하나하나 바꾸지 않아도 된다.
- method를 이용해 데이터 유효성 검사가 가능하다.
ex)
<forms.py>
from django import forms
from .models import Blog
class BlogForm(forms.ModelForm) :
class Meta : #일종의 이름표 역할 : blog모델의 fields 들을 가지고 blog form을 만들어주겠다.
model = Blog
fields = ['title', 'writer', 'body', 'image']
<views.py>
from django.shortcuts import render, redirect,get_object_or_404
from django.utils import timezone
from .models import Blog
import .forms import BlogForm #추가 된 import문
def new(request):
form = BlogForm() #추가 된 코드
return render(request, 'new.html', {'form' : form})
<new.html>
- 기존 form 태그 안에 내용 삭제 후 {% csrt_token %} 아래 { { form } } 써주기
- { { form.as_p } } : p태그로 감싸진 상태의 태그가 보여진다
<form action="{%url 'create'%}" method="post">
{%csrf_token%}
{ { form.as_p } }
<button type="submit">submit</button>
</form>
<유효성 검사>
- new.html의 <form action={%url 'create'%} method="post" enctype="multipart/form-data">에서
views.py 의 create 함수가 호출되는데 이 create 함수에서 유효성 검사를 실행한다.
#기존 코드
def create(request):
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.save()
return redirect('detail', new_blog.id)
#수정 된 코드
def create(request) :
form = BlogFom(request.Post, request.FILES)
if form.is_valid() :
#pub_date가 빠진 상태이므로 이를 무시하고 new_blog에 임시저장
new_blog = form.save(commit=False)
#new_blog의 pub_date를 timezone을 이용해 지정
new_blog.pub_date = timezone.now()
new_blog.save()
return redirect('detail', new_blog.id)
return redirect('home')
728x90
'Web > Django' 카테고리의 다른 글
[Django] 사용자 확장 (0) | 2021.06.02 |
---|---|
[Django] 로그인 및 회원가입 구현 (0) | 2021.06.02 |
[Django] media (0) | 2021.05.27 |
[Django] static (0) | 2021.05.27 |
[Django] Template 상속 (0) | 2021.05.27 |