폼과 요청 데이터
사용자 입력 처리하기
폼과 요청 데이터은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
request 객체
Flask는 모든 뷰에서 전역 request 객체에 접근할 수 있도록 합니다. 이 객체에는 폼 필드, 쿼리 문자열, JSON, 헤더 등 들어온 모든 데이터가 담겨 있습니다.
from flask import Flask, request
app = Flask(__name__)
# request is available inside any view
print('request carries the incoming data')쿼리 문자열 매개변수
URL에서 ? 뒤에 오는 데이터는 request.args에 저장됩니다. .get()을 사용하면 값을 안전하게 읽을 수 있습니다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/search')
def search():
term = request.args.get('q', '')
return 'Searching for ' + term
print('/search?q=cats -> request.args')HTML 폼
폼은 제출될 때 데이터를 전송합니다. 메서드와 대상 속성이 전송 방식과 위치를 결정합니다.
# <form method='POST' action='/login'>
# <input name='username'>
# <input name='password' type='password'>
# <button>Submit</button>
# </form>
print('Form posts username and password')폼 데이터 읽기
제출된 폼 필드는 request.form에 들어옵니다. 입력란의 이름 속성으로 해당 필드에 접근합니다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.form['username']
return 'Welcome ' + user
print('request.form holds posted fields')get으로 안전하게 접근하기
request.form['x']을 사용하면 키가 없을 때 오류가 발생합니다. 대신 request.form.get('x')을 사용하세요. 이 방식은 None을 반환합니다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.form.get('username')
if not user:
return 'Missing username', 400
return 'Welcome ' + user
print('.get avoids KeyError')하나의 뷰에서 GET과 POST 사용하기
일반적인 패턴은 하나의 뷰에서 GET 요청일 때 폼을 표시하고 POST 요청일 때 데이터를 처리하는 것입니다.
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
return 'Thanks, ' + request.form.get('name', 'friend')
return render_template('contact.html')
print('One view, two methods')입력값 검증하기
사용자 입력을 절대 그대로 신뢰하지 마세요. 사용하기 전에 필수 필드가 존재하고 타당한 값을 가지는지 확인합니다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/age', methods=['POST'])
def age():
raw = request.form.get('age', '')
if not raw.isdigit():
return 'Age must be a number', 400
return 'Age is ' + raw
print('Validate before trusting input')JSON 읽기
API 클라이언트는 JSON을 자주 전송합니다. request.get_json()은 본문을 Python 딕셔너리로 분석합니다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/api', methods=['POST'])
def api():
data = request.get_json()
return 'Got name ' + data.get('name', '?')
print('get_json parses the JSON body')파일 업로드
업로드된 파일은 request.files에 저장됩니다. 파일을 검증한 후 해당 파일의 .save() 메서드로 저장합니다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
f = request.files.get('photo')
if f:
return 'Received ' + f.filename
return 'No file', 400
print('request.files holds uploads')POST 후 리디렉션
폼을 처리한 후에는 새로 고침으로 인한 중복 제출을 방지하기 위해 사용자를 다른 페이지로 리디렉션합니다. redirect(url_for(...))을 사용합니다.
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/done')
def done():
return 'All done'
@app.route('/save', methods=['POST'])
def save():
return redirect(url_for('done'))
print('Post/Redirect/Get pattern')플래시 메시지
flash()는 리디렉션 후 표시할 일회성 메시지를 저장하므로 '성공적으로 저장되었습니다'와 같은 확인 메시지에 유용합니다.
from flask import Flask, flash, redirect, url_for
app = Flask(__name__)
app.secret_key = 'change-me'
@app.route('/save', methods=['POST'])
def save():
flash('Saved successfully')
return redirect(url_for('save'))
print('flash shows a one-time message')간단한 확인
폼 처리에 대한 지식을 확인합니다.
복습
Flask에서 사용자 입력을 처리하는 방법을 배웠습니다.
- 쿼리 문자열에는
request.args를, 폼 필드에는request.form을 사용합니다 - JSON 본문에는
request.get_json()을, 업로드에는request.files를 사용합니다 - 항상 입력값을 검증하고 안전하게 접근하려면
.get()을 사용합니다 - 깔끔한 사용자 경험을 위해 POST/리디렉션/GET 패턴과
flash()를 사용합니다
자주 묻는 질문
“폼과 요청 데이터” 강의는 무료인가요?
네 — “폼과 요청 데이터” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“폼과 요청 데이터”에서 뭘 배우나요?
사용자 입력 처리하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“폼과 요청 데이터” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 라우트와 뷰
- Jinja2 템플릿
- 폼과 요청 데이터
- REST 엔드포인트 만들기