기능 분리하기 - 블루프린트

Red_Panda·2021년 3월 12일
0
post-thumbnail

먼저 views 디렉토리안에 question_views.py파일을 만들어, 질문 목록, 질문 상세 기능을 분리해주자.
코드는 main_views.py와 매우 유사하다. 그래서 main_views.py 내용을 복사해 조금 수정하면 된다.


먼저 블루프린트 객체를 생성할 때 question이라는 이름을 사용한다.
url_prefix도 /question으로 바꿔main_views.py와 구별했다.
def index()함수를 def _list() 함수로 수정해줬다. 그리고 _list함수 위 라우트도 '/' -> '/list/'로 수정해줬다.

예약어는 파이썬에서 이미 문법적인 용도로 사용되고 있기 때문에 변수명 등의 식별자로 사용하면 안되는 단어들이다. 그러니 변수명을 정할때, 예약어는 반드시 피하자.


방금 만든 블루프린트를 __init.py__파일에 추가해 적용 시켜줬다.

그리고 question_views.py와 겹치는 기능인 main_views.py에서의 detail함수를 제거했다.
그리고 리다이렉트 기능을 사용할 수 있도록 redirect 함수를 import하고 def index()를 question._list에 해당하는 url로 리다이렉트할 수 있도록 수정한다.

redirect : re + direct 는 다시 지시한다는 의미로, 입력받은 URL로 이동시킨다.

여기서는 '/' 주소에 도착했을때, url_for안에 있는 주소 question(블루프린트 이름)._list(블루프린트에 등록된 함수명)로 다시 이동하라는 뜻이다.
_list의 라우트는 @bp.route('/list/')다. 그래서 question_views.py에서 설정한 접두어 /question과 합쳐져 /question/list인 URL을 반환하게 되는것이다.

main_views.py도 수정했다. 이제 question_list.html파일만 수정해주면 된다!
기존 question_list.html 파일에서 링크 연결부분이 /detail/로 하드코딩으로 되어있어 주소가 고정되어있었다.

하드 코딩 : 소스안에 데이터를 직접 입력해 저장함. 값이 바뀔때 마다 일일이 값을 수정 해줘야해 유지, 보수에 좋지 않다.


이제 url_for를 이용해 question.detail 라우트 함수로 URL을 찾도록 했다. 이 함수는 question_id 매개변수가 필요하므로 넣어줬다. 이제 question.detail 라우트 함수로 찾는 URL이 바뀌어도 바뀐 URL로 알아서 연결된다.

다음 시간에는 답변 등록 버튼을 만들고 기능을 만들겠다.

profile
신입 개발자

0개의 댓글