파이썬 flask로 데이터 업로드 할때.
조회수 3889회
해당 코드에서 제출 누르면 form action에 의해 http://localhost:5000/fileUpload 로 연결되서 파일 업로드하는 걸로 이해했는데요...
upload.html
<html>
<body>
<form action = "http://localhost:5000/fileUpload" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit"/>
</form>
</body>
</html>
upload.html파일만 만들었지, 따로 fileUpload라는 html파일을 만들지도 않았는데, 전송이 가능하더라고요.. 어떻게 전송이 가능한지 알고 싶습니다. @app.route('/') 이부분이 로컬주소로 부터 받아오는 부분으로 알고있고, return이 값 보내는 부분으로 알고있었는데.. 헷갈리네요ㅠ 도움주시면 감사하겠습니다.
flask_upload.py
from flask import Flask, render_template, request
from werkzeug import secure_filename
app = Flask(__name__)
#업로드 HTML 렌더링
@app.route('/upload')
def render_file():
return render_template('upload.html')
#파일 업로드 처리
@app.route('/fileUpload', methods = ['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
#저장할 경로 + 파일명
f.save(secure_filename(f.filename))
return 'uploads 디렉토리 -> 파일 업로드 성공!'
if __name__ == '__main__':
#서버 실행
app.run(debug = True)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
"따로 ~라는 html파일을 만들지도 않았는데, ~이 가능"하게 하려고 구현한 게 바로 그 라우팅이라는 겁니다.
라우팅(영어: routing)은 어떤 네트워크 안에서 통신 데이터를 보낼 경로를 선택하는 과정이다. 위키백과
# 플라스크: "앗! 사람들이 http://localhost/upload 로 접속하면 어디로 보내주지? @app.route('/upload') # 그런 HTTP 요청은 이 함수가 처리하게 해줘야겠다!" def render_file(): # 함수: "네 뭐 그러세요. 난 그냥 upload.html 파일 템플릿 가지고 화면 그려서 돌려주면 되니까." return render_template('upload.html') # 플라스크: "헉 근데 사람들이 http://localhost/fileUpload 경로로 접속을 하면 그건 또 어디로 보내줘야 되지? @app.route('/fileUpload', methods = ['GET', 'POST']) # 그 HTTP 요청은 이 함수보고 알아서 하라고 해야지!" def upload_file(): # 함수: "아 그래요? 그러면 그 HTTP 요청의 메소드가 마침 POST일 때는 if request.method == 'POST': # 아마 그 요청의 body에 담긴 파일업로드 파트에서 "file"에 할당된 데이터가 뭔가 있을테니까 f = request.files['file'] # 그걸 그대로 적당한 파일명 줘서 저장한 다음에 f.save(secure_filename(f.filename)) # 알림 메시지 돌려주고 끝내겠습니다." return 'uploads 디렉토리 -> 파일 업로드 성공!'
더 정확한 해설이 필요하시다면 공식 문서를 읽어보세요.
댓글 입력