IT/파이썬

플라스크에서 ORM 사용하기 5 - db에 데이터 넣기

thesse 2021. 5. 24. 15:49
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
반응형