[점프 투 플라스크]질문 등록 기능 만들기

안녕하세요 점프 투 플라스크를 보며 공부 하고 있는 학생입니다.
2-10 do it 실습 질문 등록 기능 만들기에서 궁금한 내용이 있어 질문 해 봅니다.
질문등록기 만드는 과정을 제가 이해한 내용대로 작성해 보자면
1)질문 등록하기 버튼+url 을 question_list.htlm에 만들고 -> 2) 그 rul을 라우트 함수로 추가합니다. -> 3) 질문 등록 폼 클래스(form.py)를 작성하고 ->4) 질문등록 폼을 화면에 보여줄 질문등록템플릿을 만듭니다....

이 과정들 속에 궁금한 것은
1) 질문 등록 템플릿.html에서 작성한 질문 제목과 내용들을 어떻게 가져와 db에 저장하는가?
2) form.py의 역할은 무엇인가
3) form.py로 질문등록템플릿을 만드는가...?
4) 저장된 질문 글은 어떠한 과정을 통해 메인 화면에 subject로 나타나는가?
입니다.

긴 글 읽어 주셔서 감사합니다.

zion1235 564

M 2021년 11월 11일 11:29 오전

목록으로
1개의 답변이 있습니다. 1 / 1 Page

프로그래머로 전직하려고 1개월전부터 열심히 공부중인 노땅입니다. 책으로만 공부해서 제가 이해하고 있는 것이 맞는 지는 저도 아직 확신이 없습니다만 제가 이해한 내용으로 설명을 해 보겠습니다.

1) 사용자 데이터를 서버에 전달하기 위해 html form 태그를 사용합니다.


...
<input type="text" name="subject"...
<textarea name="content"...
...
subject와 content라는 이름으로 데이터가 서버에 전달이 되는거죠.

2) forms.py 에서 FlaskForm은 사용자가 form 태그로 전달한 subject와 content를 서버에서 처리하도록 해주는 함수입니다. db 모델 클라스를 만드는 것과 비슷한데 클라이언트와 서버에서 어떤 데이터(form에서는 field라고 부르네요)를 주고받을지를 약속하는 클라스입니다. subject와 content 필드를 만들었으니 html form에서도 subject와 content라는 이름으로 서버에 데이터를 전달해야 합니다.

3) 질문폼을 만드는 것은 html의 form 태그입니다.

4) 질문등록(create)할 때는 form태그로 만들어진 박스에 db값을 읽어올 필요가 없구요, 질문을 수정(modify)할 경우에는 html로 전달한 form
을 이용해 박스에 value="{{ form.subject.data or '' }} 이렇게 데이터를 채웁니다.

보충 설명을 하자면,
사용자가 '질문등록하기' 를 클릭하면 서버에 GET request로 question_form.html을 보여달라고 하게됩니다. GET 메소드이기 때문에 create함수에서 if request.method == 'POST': 는 실행되지 않고 form 인스턴스를 전달하면서 서버에 rendering을 요청합니다. 그리고 사용자가 subject와 content를 입력하고 '저장'을 하게되면 다시한 번 /create/ route가 실행되고 이번에는 POST request이기 때문에 if request.method == 'POST': 안쪽의 코드가 실행됩니다. 서버는 form이라는 그릇에 데이터를 담아서 전달한 것이고 이 데이터를 question 테이블에 집어 넣고 db를 업데이트합니다.

jinoung

2021년 11월 11일 2:18 오후