멋쟁이 사자처럼 at 한국교통대학교 7기

2019 KNUT X LIKE LION #7

forms.py

토픽 멋쟁이 사자처럼 at 한국교통대학교 7기 > 웹 애플리케이션 개발 > Django
forms.py

  • 지금까지 관리자 페이지에서 모델이 제대로 생성되었는지 확인하였고, 블로그 객체를 하나 만들었습니다.
  • 이제 이것을 블로그 메인 화면에서 [글쓰기] 버튼을 누르면 창이 뜨도록 만들어봅시다.
     
  • 전에 만든 데이터베이스 모델에서 항목들('title', 'pub_date', 'body')을 가져오는 작업을 해야 합니다.
    그렇게 하기 위해서 [forms.py] 파일을 생성해줍니다.
[blogapp]에서 오른쪽 클릭을 합니다.
[blogapp]-[New]-[Python File]

 

[forms]라고 입력하고 [OK]를 클릭합니다.

 

  • [forms.py]가 생성되었습니다.

 

 

 

  • 일단 다음과 같이 입력합니다.
from django import forms
from .models import Blog

class CreateBlog(forms.ModelForm):
    class Meta:
        model = Blog

        fields = ['title', 'pub_date', 'body'] 
  • 장고에서 기본적으로 지원하는 [forms]를 import합니다.
    또한 Blog 모델을 가져옵니다.
  • 블로그를 생성할 것이기 때문에 이름을 [CreateBlog]로 하였습니다.
    장고에서 Meta 클래스는 내부 클래스로 활용되며, 이는 기본 필드의 값을 재정의할 때 사용합니다.
    [Blog]로 부터 모델을 가져오고 그 중 'title', 'pub_date', 'body'를 가져온다는 의미입니다.

 

 

 

 

 

createBlog.html

  • [글쓰기]에 사용할 폼은 만들었지만, 그것을 띄워줄 템플릿을 아직 생성하지 않았습니다.
  • 지금까지 하던 대로 view를 만들고 템플릿[createBlog.html]을 생성하겠습니다.
    자세한 설명은 생략하도록 하겠습니다.
[blogapp]-[templates]에서 오른쪽 클릭합니다.
[blogapp]-[templates]-[New]-[HTML File]

 

[createBlog]입력하고 [OK]누릅니다.

 

[createBlog.html]이 생성되었습니다.

 

 

 

  • [blogapp]-[views.py]에서 뷰를 생성해주도록 합니다.
  • 함수 이름은 [createBlog]로 만들었습니다.
def createBlog(request):
    return render(request, 'createBlog.html')

 

 

 

  • [firstProject]-[urls.py]에서 url을 추가해주도록 합니다.
  • 저는 [blogMain/createBlog]주소가 입력되면 연결되도록 해주었습니다.
path('blogMain/createBlog/', blogapp.views.createBlog, name='createBlog'),

 

 

 

  • [blogMain.html]에서 [글쓰기] url 연결해줍니다.

 

 

 

뷰 수정

  • 이제 [글쓰기] 페이지로 링크 연결까지 해주었으니 [createBlog] 함수에서 폼을 불러들이도록 합시다.
  • [blogapp]-[views.py]에서 [createBlog] 함수를 다음과 같이 수정합니다.
  • 불러들인 폼을 [createBlog.html]으로 보내기 위해 [form]이라는 객체를 생성하고 보내줍니다.
    지금까지는 render(request, '템플릿') 형식으로 사용하였지만, 여기서는 세번째 인자가 하나 더 추가된 것을 볼 수 있습니다.
    세번째 인자는 [context]를 보내는 것이며, 딕셔너리 자료형의 형태를 가집니다. 이는 [createBlog.html] 문서에 딕셔너리 자료형을 보내게 되고, [createBlog.html]에서는 장고 템플릿 변수를 이용하여 값을 출력할 수 있게 됩니다.
from .forms import CreateBlog

def createBlog(request):
    form = CreateBlog()

    return render(request, 'createBlog.html', {'form': form})

 

 

 

 

createBlog.html 수정

  • 위에서 딕셔너리 자료형으로 [form]이라는 객체를 전달하였으므로 키 값 'form'을 이용하여 출력해봅시다.
  • html 문서에서 출력할 때에는 장고 템플릿 변수를 이용하여 출력합니다.
  • 형태는 {{ }} 와 같은 형식을 이용합니다.
  • 객체를 가져오기 때문에 상황에 따라 장고 템플릿을 활용하여 사용할 수 있습니다.
     
  • 우리는 일단 그냥 값을 출력해보도록 합시다.
{{ form }}

 

  • 서버를 실행하고 [글쓰기]에 들어가면 다음과 같이 뜰 것입니다.
  • 'title', 'pub_date', 'body'가 출력이 되는 것을 볼 수 있습니다.

 

  • [createBlog.html]에서 다음과 같이 수정해보도록 하겠습니다.
{{ form.as_p }}

 

  • 이는 폼을 <p> 태그로 감싼 형태로 출력해줍니다. 이 외에도 'as_table', 'as_ul'이 있고, 각자 한번씩 테스트해보도록 합시다.
  • [form.as_p]를 적용했을 때의 결과는 다음과 같습니다.

 

 

 

댓글

댓글 본문