• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

이미지 업로드 시 작성된 코드 질문입니다.

20.12.02 08:52 작성 조회수 105

1

첫번째 질문입니다.

이전 강좌에서는 코드에 @blueprint.route 추가하면

뒤에 따라오는 ("/list") 이런식의 값이

사용자가 직접 입력하는 주소를 의미했잖아요?

(GET과 POST가 서로 다른 방식으로

작동한다는 것은 이해하고 있습니다.)

그럼 이미지 업로드 강의 내용 중에 ajax 통신을 하기 위해 

@blueprint.route("/upload_image") 라는 코드를

작성하셨는데 그러면 ajax 통신을 할 때 눈에는 보이지

않지만 가상의 페이지를 통해서 이미지를 주고 받는건가요?

두번째 질문입니다.

upload_image 함수를 만드신 다음에 board_images 라는

함수를 만드셨는데 이 함수 내용이 리턴밖에 없습니다.

그러면 굳이 함수를 나눌  필요 없이 upload_image에서

같이 묶어서 처리할 수는 없는건가요?

명확한 기능 구분을 위해서 따로 나눈건지

아니면 url_for 함수와 send_from_directory 함수는

리턴 값으로만 넘길 수 있는건가요?

답변 1

답변을 작성해보세요.

0

첫번째.

@blueprint.route를 추가하면 사람이 생각하기에는 페이지를 의미하지만 사실 프로그램 관점에서 보면 그냥 하나의 동작함수 개념이라고 생각하시면 됩니다. 그래서 /list 던 /upload_image 던 라우트 주소에 해당하는 함수가 동작하는게 전부인데 우리가 list 에서는 html 페이지를 보여주는 기능을 작성하는거고 upload_image에서는 파일만 처리하고 특정 데이터를 리턴해주는 동작만 구현한것일 뿐입니다.

두번째.

upload_image 에서는 이미지를 저장하고 저장된 이미지의 주소값을 넘겨줍니다. 이렇게 되면 주소를 받은 html 페이지에서 <img src="주소"> 태그가 완성되는데 이때 "주소" 에서 이미지를 뿌려줘야 실제 img 태그에 이미지가 보여지게 됩니다. 여기서 이미지를 뿌려주는 역할을 board_images 라는 애가 처리하는 역할을 합니다. 질문자님께서 말씀하신 내용이라면 이미지를 저장하고 동시에 뿌려주는 기능을 말씀하신건데 그렇게 되면 <img src="주소">에서 주소를 넣을 수가 없게 됩니다. 질문자님의 의도대로 하나의 함수로 동작하게 하려면 <img src="주소"> 대신에 <img src="data:image/jpeg;base64, ....."> 태그를 사용할 수 있는데 upload_image 에서 이미지를 저장하고 저장된 이미지를 base64 인코딩해서 인코딩된 이미지 전체를 다시 리턴해주고 이를 바로 img src에 적용할 수도 있습니다. 그렇게 되면 board_images 함수는 사용하지 않고 처리할 수 있습니다.