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

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개의 댓글

관련 채용 정보