웹개발/[점프 투 플라스크]
[점프 투 플라스크] 질문 목록, 질문 상세 기능 만들기 및 블루프린트로 기능 분리하기 & url_for
2soon2soon
2024. 4. 10. 03:53
질문 목록, 상세기능 만들기 with Blueprint
question_views.py 일부 |
bp = Blueprint('question', __name__, url_prefix='/question')
@bp.route('/list')
def _list():
question_list = Question.query.order_by(Question.create_date.desc())
return render_template('question/question_list.html', question_list=question_list)
@bp.route('/detail/<int:question_id>/')
def detail(question_id):
question = Question.query.get_or_404(question_id)
return render_template('question/question_detail.html', question=question)
|
Question.query.order_by(Question.create_date.desc()) 클래스/객체.쿼리.정렬(정렬기준/조건)
퀘스쳔테이블에서 생성일 내림차순 기준으로 정렬해서 가져온다(쿼리를 요청한다)
render_template('렌더링할 주소', (넘겨줄 데이터의 새 이름) = (넘겨줄 데이터))
렌더링 = 넘겨주다 정도로 이해하자
넘겨줄 주소와 넘겨줄 데이터를 인자로 넣어줘야함.
Question.query.get_or_404(question_id)
퀘스쳔테이블에서 question_id를 가지는 데이터를 가져온다. 없으면 404error출력.
-----
__init__.py에 블루프린트 객체 추가해야함.(교재.2-05)
-----
main_views.py 일부 |
@bp.route('/')
def index():
return redirect(url_for('question._list'))
|
redirect(URL)
URL로 페이지를 이동.
url_for("라우팅 함수명", (넘겨줄 데이터의 새 이름) = (넘겨줄 데이터))
라우팅함수에 매핑되어 있는 URL을 리턴
question_list <- question(블루프린트의 별칭), _list(question이라는 별칭을 가지고 있는 모듈의 라우팅함수명)
하드코딩vs url_for함수 |
<a href="/question/detail/{{ question.id }}">{{question.subject}}</a> |
<a href="{{ url_for('question.detail', question_id=question.id) }}">{{ question.subject }}</a>
|
url_for함수를 사용하면 유지/보수가 쉬워짐.
라우팅함수의 URL구성 방식 자체가 변하면 하드코딩한 경우는 하드코딩한부분을 일일이 다 바꿔주어야함.
url_for함수를 쓴 경우는 라우팅함수의 url만 바꾸어주면 됨.
실제 프로젝트에서 이러한 url 리팩토링은 자주 일어남.