[Python Django] 3-1. CBV FormView를 이용한 Create 구현
2022. 3. 26. 09:37ㆍPython/Django Framework
반응형
FormView를 이용하여 게시판 글 작성 페이지를 만들어보겠습니다.
forms 생성
# board/forms.py
from django import forms
class BoardCreateForm(forms.Form):
title = forms.CharField(
max_length=256,
label="제목",
error_messages={'required': '제목을 입력해주세요'}
)
contents = forms.CharField(
widget=forms.Textarea,
label="내용",
error_messages={'required': '내용을 입력해주세요'}
)
views 수정
저장 후 다시 저장 페이지를 보여줍니다.
# board/views.py
from django.views.generic import FormView
from board.forms import BoardCreateForm
from board.models import Board
class BoardCreateView(FormView):
form_class = BoardCreateForm
template_name = "board_create.html"
success_url = "/board/create/"
def form_valid(self, form):
# user 정보 취득
user_id = self.request.session.get('user_id')
if user_id:
try:
user = User.objects.get(pk=user_id)
except User.DoesNotExist:
return redirect("/user/login/")
else:
return redirect("/user/logout/")
board = Board(
title=form.cleaned_data.get('title'),
contents=form.cleaned_data.get('contents'),
insert_user=user
)
board.save()
return super().form_valid(form)
템플릿 생성
# board/templates/board_create.html
{% extends "base.html" %}
{% block contents %}
<div class="row mt-5">
<div class="col-12 text-center">
<h1>글쓰기</h1>
</div>
</div>
<div class="row mt-5">
<div class="col-12">
<form action="." method="POST">
{% csrf_token %}
{% for field in form %}
<div class="mb-3">
<label class="form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
{% ifequal field.name 'contents' %}
<textarea class="form-control" id="{{ field.id_for_label }}"
name="{{ field.name }}"></textarea>
{% else %}
<input class="form-control" id="{{ field.id_for_label }}" name="{{ field.name }}"
type="{{ field.field.widget.input_type }}"/>
{% endifequal %}
</div>
{% if field.errors %}
<span style="color:red">{{ field.errors }}</span>
{% endif %}
{% endfor %}
<div class="d-grid mt-3">
<button class="btn btn-lg btn-primary" type="submit">저장하기</button>
</div>
</form>
</div>
</div>
{% endblock %}
url 연결
# board/urls.py
from django.urls import path
from board.views import BoardCreateView
urlpatterns = [
path('create/', BoardCreateView.as_view())
]
반응형
'Python > Django Framework' 카테고리의 다른 글
[Python Django] 3-3. CBV FromView ForeignKey 연결 (0) | 2022.03.26 |
---|---|
[Python Django] 3-2. CBV DetailView를 이용한 상세페이지 구현 (0) | 2022.03.26 |
[Python Django] 2-6. FBV Delete 구현하기 (0) | 2022.03.26 |
[Python Django] 2-5. FBV List, Pagination 구현하기 (0) | 2022.03.26 |
[Python Django] 2-4. FBV Form을 이용한 Update 구현 (0) | 2022.03.26 |