작성
·
199
1
안녕하세요 선생님
영상 28분 04 초 입니다
여기서 보면
@bp.route('/upload_image', methods=['POST'])
def upload_image():
if request.method == 'POST':
file = request.files['image']
if file is not None and allowed_file(file.filename):
filename = "{}.jpg".format(random_generator())
savefilepath = os.path.join(app.config["BOARD_IMAGE_PATH"], filename)
file.save(savefilepath)
return url_for('board.board_images', filename=filename)
위와 같이 upload_image 함수를 만들었어요
근데 return할대 redirect 없이 url_for만 사용하였습니다.
url_for만 단독으로 사용이 가능하다면, 이전영상들에서는
왜 redirect(url_for(~~~)) 이런식으로 코드를 만들었을까요
굳이 redirect 없이, url_for만 사용하면 될텐데요
너무 궁금하여 질문드립니다~
답변 1
1
웹프로그래밍은 프로그램의 흐름을 이해하셔야 합니다. 질문하신 upload_image 함수는 이미지 업로드에 사용되는 함수로서 이미지를 클라이언트로 전달받아서 서버에 저장하고 저장된 이미지의 주소를 반환해주는 용도로 사용됩니다. 그래서 페이지를 이동하면 안되고 이동할 이유가 없습니다.
질문자님께서 지금 여기 인프런 질문게시판에 저한테 질문하실때 이미지를 올리셨는데 이미지 업로드가 끝나니까 갑자기 페이지가 이동되면 어떠시겠어요? 그래서 redirect 를 할 필요가 없고 해서는 안되는 내용입니다.
url_for 함수는 서버의 주소를 편하게 표기하기 위해 사용되는 하나의 유틸리티 같은 기능의 함수입니다. 꼭 써야하는건 아니지만 쓰면 엄청 편한 역할을 하는거죠. 예를 들어,
url_for('board.board_images', filename=filename)
를 사용하지 않고 대신에
http://도메인주소/board/images?filename=abcd
이렇게 작성해도 상관없습니다. 물론 위는 하나의 예시입니다. 그런데 만약 /board/ 경로를 /board2/로 바꿔야한다면 소스코드 전체를 다 수정해야겠죠? 그래서 그런 편의를 위해서 url_for를 사용하는 겁니다. url_for 가 엄청 특별한 기능을 해주는건 아닙니다. redirect 와 url_for 는 서로 아무런 관련이 없습니다.