바뀜

1,608 바이트 추가됨 ,  2021년 6월 25일 (금) 13:05
52번째 줄: 52번째 줄:     
== view 작성 ==
 
== view 작성 ==
board.views.py에 다음과 같은 함수를 추가한다.<syntaxhighlight lang="python">
+
 
 +
board.views.py에 다음과 같은 함수를 추가한다.
 +
 
 +
일반적으로 페이지를 불러오는 것과 데이터를 저장하는 데 같은 링크를 사용한다.
 +
 
 +
페이지 요청방식에 따라 달리 작동하게 하면 되는데, POST요청이면 데이터를 저장.
 +
 
 +
(링크를 타고 오는 경우, GET 요청으로 들어온다.)
 +
{| class="wikitable"
 +
!일반적으로 코드를 짤 경우
 +
!제네릭뷰(클래스형 뷰)를 쓰는 경우
 +
|-
 +
|<syntaxhighlight lang="python">
 
def create(request):
 
def create(request):
 
     from django.shortcuts import redirect
 
     from django.shortcuts import redirect
70번째 줄: 82번째 줄:  
     # 없으면 그냥 form 작성을 위한 객체를 넘긴다.
 
     # 없으면 그냥 form 작성을 위한 객체를 넘긴다.
 
     return render(request, 'board/create.html', context)
 
     return render(request, 'board/create.html', context)
 +
</syntaxhighlight>보통 기존입력값을 지우지 않고 보관하여 다시 보여주기 위해 작성페이지 view 와 데이터제출 view를 한 함수에 만든다.
 +
 +
글 작성view 뿐 아니라 수정view를 작성할 때에도 마찬가지이다.
 +
|<syntaxhighlight lang="python">
 +
from django.views import generic
 +
from django.urls import reverse_lazy  # 이건 뭐지;;?
 +
 +
class create(generic.CreateView):
 +
    model = Question
 +
    feilds = ['필드명', '필드명',...]  # 작성할 필드명 지정
 +
    template_name_suffix='_create'
 +
    # 사용하는 탬플릿 명을 '모델명_create.html'로 바꾼다는 의미. 접미사만 바꾼다.
 +
    # 기본 탬플릿은 '모델명_form.html'로 나타난다.
 +
   
 +
    def form_valid(self, form):  # 폼에 이상이 없으면 실행.
 +
        temp = form.save(commit=False)  # 임시 저장. 폼 외의 다른 내용을 조작하고 싶을 때 사용한다.
 +
        조작
 +
        temp.save()  # 최종 저장
 +
        return super().form_valid(form)
 +
       
 +
    def get_success_url(self):  # 기존 함수를 덧쓴다. 작성 후에 해당 글을 보여주게끔.
 +
        return reverse('pool:detail', kwargs={'pk': self.object.question.pk})
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
|}
 
== template 작성 ==
 
== template 작성 ==
   79번째 줄: 113번째 줄:  
<form action="{% url 'board:create' %}" method="POST">
 
<form action="{% url 'board:create' %}" method="POST">
 
     {% csrf_token %}
 
     {% csrf_token %}
     {{ form}}
+
     {{ form }}
 
     <input type="submit" value="제출">
 
     <input type="submit" value="제출">
 
</form>
 
</form>