Development/Django(멋쟁이사자처럼 7기 운영진)

[멋사7기] 6주차 - 1, 2. form 이론, 실습

안다희 2019. 2. 17. 11:14
728x90

model 형식에 맞는 입력공간 만들기.

html로 form 태그를 만드는 것에는 한계가 있다!

-> 장고의 기능을 활용!


form 만드는 것은 모델 만드는 것과 비슷하다.


form.py


models.py -> db와 매핑

form.py -> html <form>과 매핑  


(1) 모델 기반 입력공간 만들기 : from django import forms.ModelForm

- Meta 클래스?    ?????






1) blog 앱 안에 form.py (일반적으로는 forms.py) 파일 생성

# Blog class를 기반으로 만들 것이기 때문에 blog 안에 form.py를 만들어준 것! models.py 여기 있자너
from django import forms
from .models import Blog

# 모델기반이 아니면 forms.Form
class BlogPost(forms.ModelForm):
class Meta:
model = Blog
fields = ['title', 'body']


2) blog 앱 안에 있는 urls.py

path('newblog/', views.blogpost, name="newblog"),

추가


3) blog 앱 안에 있는 views.py

from .form import BlogPost

당연히 import 해줘야겠지

def blogpost(request):
# 1. 입력된 내용 처리 : POST
if request.method == 'POST':
form = BlogPost(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.pub_date = timezone.now() # 나머지는 form.py에서 써줬지~
post.save()
return redirect('home')
# 2. 빈 페이지 띄워주는 기능 : GET
else:
form = BlogPost()
return render(request, 'new.html', {'form': form})



** timezone 은

from django.utils import timezone

이거~



4) new.html

{% extends 'base.html' %} <!-- 모든 태그에 비해서 우선순위가 높은 extends 태그! -->
{% block contents %}
<br>
<div class="container">
<form method="POST"> <!-- action이 필요없다 -->
{% csrf_token %}
<table>
{{form.as_table}}
</table>
<br>
<input class="btn btn-dark" type="submit" value="제출하기">
</form>
</div>


{% endblock %}



========================================


(2) 임의의 입력공간 만들기 : from django import forms.Form






1) form.py

# Blog class를 기반으로 만들 것이기 때문에 blog 안에 form.py를 만들어준 것! models.py 여기 있자너
from django import forms
from .models import Blog

# 모델기반이 아니면 forms.Form
class BlogPost(forms.Form):
email = forms.EmailField()
files = forms.FileField()
url = forms.URLField()
words = forms.CharField(max_length=200)
max_number = forms.ChoiceField(choices=[('1', 'one'), ('2', 'two'), ('3', 'three')]) # one은 1로 간주하겠다.


이렇게만 바꿔주고 바로 서버돌리면 됨~!




==============================================

form.py는

form.py를 만들고 쓰고싶은 파일에 import 해서 써주면 되는 파일임




==============================================

Field 종류


출처: https://mingos-habitat.tistory.com/34 [밍고의서식지:티스토리]