300x250
반응형
html
<form action="{{ url_for('answer.create', question_id=question.id) }}" method="post">
<textarea name="content" id="content" rows="15"></textarea>
<input type="submit" value="답변등록">
</form>
submit 누르면 answer 블루프린트의 create 함수 찾아감
post로 보냈으므로 받는쪽도 post여야함
blueprint
from flask import Blueprint, url_for, request
from werkzeug.utils import redirect
from datetime import datetime
from pybo import db
from pybo.models import Answer, Question
bp = Blueprint('answer', __name__, url_prefix='/answer')
@bp.route('/crate/<int:question_id>', methods=('POST',))
def create(question_id):
question = Question.query.get_or_404(question_id)
content = request.form['content'] # html form에서 넘겨받은 content 값
# answer 만들어서 db에 커밋
answer = Answer(question=question, content=content, create_date=datetime.now())
db.session.add(answer) # 또는 question.answer_set.append(answer)
db.session.commit()
return redirect(url_for('question.detail', question_id=question_id))
method 아니고 methods (s 붙여야함)
('POST') 아니고 ('POST',) (콤마 있어야함)
url로 받은 question_id는 함수의 파라메터로 받았지만
form에서 넘겨받은 content는 request 라이브러리 임포트해서 request.form['content']로 받음
위 코드처럼 answer를 그대로 add해도 되고
옆의 주석처럼 question.answer_set에 넣어줘도 됨 (이렇게 하면 answer에 question 안넣어도 됨)
anser_set 개수 구하기
<h5>{{ question.answer_set|length }}개의 답변이 있습니다.</h5>
question.anser_set|length 를 통해 answer 몇개 있는지 구할 수 있음
( | 는 시프트키 누르고 원화표시\ 누르면 나오는 기호)
300x250
반응형
'IT > 파이썬' 카테고리의 다른 글
[플라스크] ModuleNotFoundError: No module named 'flask_wtf' 에러 (0) | 2021.05.28 |
---|---|
파이썬 데코레이터 (1) | 2021.05.27 |
플라스크에서 ORM 사용하기 4 - 라우팅 (0) | 2021.05.24 |
플라스크에서 ORM 사용하기 3 - db에서 데이터 가져오기 (0) | 2021.05.24 |
플라스크에서 ORM 사용하기 2 - 모델 및 테이블 생성 (0) | 2021.05.23 |