liminfo

Flask Reference

Flask 웹 프레임워크 레퍼런스

26개 결과

Flask Reference 소개

Flask 레퍼런스는 Flask 마이크로프레임워크로 웹 애플리케이션과 API를 구축하는 Python 웹 개발자를 위한 포괄적인 치트 시트입니다. Flask 개발의 6가지 핵심 영역을 다룹니다: 데코레이터와 변수 규칙을 이용한 URL 라우팅, 요청 데이터 접근(args, form, JSON 본문, 파일, 헤더), 응답 생성(jsonify, make_response, redirect, abort), Jinja2 템플릿 렌더링과 템플릿 상속/필터, 데이터베이스 작업을 위한 Flask-SQLAlchemy ORM, 애플리케이션 설정과 에러 처리.

이 레퍼런스는 REST API, 서버 사이드 렌더링 웹 애플리케이션, 마이크로서비스를 구축하는 Python 개발자가 활용합니다. Flask의 최소주의 철학은 필요한 컴포넌트를 직접 선택한다는 의미이므로, 이 레퍼런스는 Blueprint를 사용한 앱 모듈화, url_for()를 이용한 역방향 URL 해석, get_or_404()를 활용한 SQLAlchemy 쿼리 API, 환경별 설정 객체에서 앱 구성하기 등 실제 패턴을 반영합니다.

레퍼런스는 6가지 카테고리로 구성됩니다: 라우팅(methods=[...]이 포함된 @app.route, <username>/<int:id> 같은 URL 변수 규칙, url_for() 역방향 해석, Blueprint 모듈화), 요청(request.args GET 파라미터, request.form POST 데이터, request.json 본문, request.files 업로드, request.headers), 응답(jsonify() JSON 출력, make_response() 커스텀 헤더, redirect(), abort() HTTP 에러), 템플릿(Jinja2 {{ }}, {% if %}/{% for %}, {% extends %} 상속, | 필터 파이프), 데이터베이스(Flask-SQLAlchemy db.Model, db.session CRUD, Model.query 필터링), 설정(app.config, from_object(), @app.errorhandler, app.logger).

주요 기능

  • GET, POST, PUT, DELETE 메서드 처리를 위한 methods=[] 포함 @app.route 데코레이터
  • <username>, <int:id>, <path:subpath> 타입 컨버터 URL 변수 규칙
  • 대규모 앱을 auth, api, admin 모듈로 분리하는 Blueprint 클래스
  • request.args, request.form, request.json, request.files, request.headers 접근
  • JSON 응답을 위한 jsonify()와 커스텀 헤더 주입을 위한 make_response()
  • {% extends %}, {% block %}, | 필터 파이프를 이용한 Jinja2 템플릿 상속
  • Flask-SQLAlchemy db.Model 정의, db.session CRUD, query.get_or_404()
  • 커스텀 404/500 페이지를 위한 @app.errorhandler와 구조화 로깅을 위한 app.logger

자주 묻는 질문

Flask란 무엇이고 Django 대신 언제 사용해야 하나요?

Flask는 라우팅, 요청/응답 처리, Jinja2 템플릿을 최소한의 보일러플레이트로 제공하는 경량 WSGI 마이크로프레임워크입니다. 스택에 대한 완전한 제어가 필요하거나 REST API나 마이크로서비스를 구축하거나 ORM, 인증, 직렬화를 위한 특정 라이브러리를 통합해야 할 때 Flask를 선택하세요. 관리자 인터페이스, ORM 마이그레이션, 사용자 모델 같은 배터리 포함 기능이 필요할 때는 Django를 선택하세요.

Blueprint를 사용하여 대규모 Flask 애플리케이션을 구성하는 방법은?

각 모듈에서 Blueprint 객체를 만듭니다: bp = Blueprint("auth", __name__, url_prefix="/auth"). 블루프린트에 @bp.route()로 라우트를 정의합니다. app.register_blueprint(bp)로 앱에 블루프린트를 등록합니다. 각 도메인 영역(auth, api, admin)을 routes.py, models.py, forms.py가 있는 자체 패키지로 구성하면 메인 앱 팩토리를 작게 유지하고 각 기능을 독립적으로 관리할 수 있습니다.

Flask에서 POST 폼 데이터와 JSON 요청 본문에 접근하는 방법은?

HTML 폼 제출(Content-Type: application/x-www-form-urlencoded)의 경우 request.form["fieldname"]이나 request.form.get("fieldname", default)로 필드를 읽습니다. JSON API(Content-Type: application/json)의 경우 request.json이나 request.get_json()으로 파싱된 본문을 읽습니다. GET 쿼리 파라미터는 request.args.get("q")를 사용합니다. 파일 업로드의 경우 request.files["photo"]로 접근하고 file.save()로 디스크에 저장합니다.

Flask-SQLAlchemy는 데이터베이스 작업에 어떻게 사용하나요?

db.Column 필드가 있는 db.Model을 서브클래싱하여 모델을 선언합니다. db.session.add(obj)와 db.session.commit()으로 레코드를 생성합니다. Model.query.filter_by(active=True).all()로 목록을 조회하거나 찾지 못하면 자동으로 404를 반환하는 Model.query.get_or_404(id)로 단일 레코드를 조회합니다. 업데이트는 객체를 가져와 속성을 수정하고 db.session.commit()을 호출합니다. 삭제는 db.session.delete(obj)를 호출하고 커밋합니다.

Flask에서 JSON 응답을 반환하는 방법은?

jsonify()를 사용하여 Python 딕셔너리나 리스트를 올바른 Content-Type 헤더가 있는 JSON 응답으로 변환합니다: return jsonify({"status": "ok", "data": items}). 커스텀 HTTP 상태 코드를 설정하려면 체이닝합니다: return jsonify({"id": new_id}), 201. 전체 응답 제어를 위해 make_response()를 사용하여 응답 객체를 얻고 헤더를 수정하여 반환합니다. Flask 2.2+는 jsonify() 없이 직접 딕셔너리 반환도 지원합니다.

Flask에서 Jinja2 템플릿은 어떻게 작동하나요?

Flask는 기본 템플릿 엔진으로 Jinja2를 사용합니다. templates/ 폴더에 템플릿을 저장합니다. render_template("page.html", title="Home", posts=posts)로 렌더링합니다. 템플릿에서 {{ variable }}로 변수를 출력하고, {% if condition %}...{% endif %}와 {% for item in items %}...{% endfor %}로 로직을 사용합니다. 공유 레이아웃을 위해 {% block content %}{% endblock %}이 있는 base.html을 만들고 자식 템플릿에서 {% extends "base.html" %}로 확장합니다. {{ name|upper }}나 {{ text|truncate(100) }}으로 필터를 적용합니다.

Flask에서 404와 500 에러를 처리하는 방법은?

@app.errorhandler(code) 데코레이터를 사용합니다. 404의 경우: @app.errorhandler(404) def not_found(e): return render_template("404.html"), 404. 500의 경우: @app.errorhandler(500) def server_error(e): return jsonify({"error": "Internal server error"}), 500. 라우트 핸들러에서 수동으로 에러를 트리거하려면 abort(404)나 abort(403)을 호출합니다. 응답 본문을 더 세밀하게 제어하려면 HTTPException 서브클래스를 직접 발생시킬 수도 있습니다.

다양한 환경에 맞게 Flask 애플리케이션 설정을 관리하는 방법은?

공통 설정이 있는 기본 Config 클래스와 DevelopmentConfig, ProductionConfig 같은 환경별 값(DEBUG, SQLALCHEMY_DATABASE_URI, SECRET_KEY)을 가진 서브클래스를 정의합니다. 앱 팩토리에서 app.config.from_object(os.environ.get("APP_CONFIG", "config.DevelopmentConfig"))로 올바른 설정을 로드합니다. Config 클래스 내에서 os.environ.get("SECRET_KEY")로 환경 변수에서 시크릿을 읽어 버전 관리에서 시크릿을 제외하세요.