[Python] Flask

About_work·2023년 3월 15일
0

기초 설명

  • Python Flask는 파이썬으로 웹 어플리케이션을 개발하는데 사용되는 마이크로 프레임워크
  • Flask는 매우 가벼우면서도 유연하며, 다른 패키지와의 결합이 쉬움
  • Flask를 사용하면 웹 어플리케이션을 빠르게 구축할 수 있으며, 사용자 인증, 데이터베이스 연동 등 다양한 기능을 쉽게 구현할 수 있습니다.
  • 또한 Flask는 RESTful API(웹 서비스의 아키텍쳐 스타일 중 하나)를 구현하는데 매우 적합합니다.
  • https://velog.io/@yh20studio/CS-Http-Method-%EB%9E%80-GET-POST-PUT-DELETE (중요)

RESTful API

  • REST: Representational State Transfer의 약자
  • HTTP 프로토콜을 따르는 웹 서비스의 아키텍처 스타일 중 하나
  • RESTful API: 자원(resource)을 이름으로 구분하여, 해당 자원의 상태(Representation)를 주고 받는 것을 의미
  • 이러한 방식은 웹 브라우저, 모바일 애플리케이션 등 다양한 클라이언트와 통신하는 웹 어플리케이션에서 표준
  • RESTful API는 단순하면서도 확장성이 뛰어나며, 다양한 클라이언트에서 호환되기 때문에 인기 있는 아키텍처 스타일 중 하나

사용법

루트 경로('/')로 요청이 들어오면 'Hello, World!'라는 문자열을 반환하는 간단한 Flask 앱

# Flask 앱 생성
from flask import Flask
app = Flask(__name__, static_folder=~~~, )

# 라우팅
@app.route('/')
def hello_world():
    return 'Hello, World!'
    
if __name__ == '__main__':
    app.run()
  • Flask(__name__)을 통해 Flask 애플리케이션을 생성합니다. 이때 인자로 전달한 name은 애플리케이션의 모듈명을 의미합니다.
  • @app.route('/')를 통해 "/" 경로로 들어오는 요청에 대해 어떤 함수를 실행할지 설정합니다.
  • hello_world() 함수에서는 "Hello, World!" 문자열을 반환하여 요청에 대한 응답을 반환합니다.
  • app.run()을 통해 애플리케이션을 실행합니다.
  • static_folder
    • 정적 파일을 저장하는 폴더를 지정합니다.
    • 여기에는 이미지, 스타일 시트, 자바스크립트 파일 등이 포함됩니다. 기본값은 static입니다.
  • template_folder
    • HTML 템플릿 파일을 저장하는 폴더를 지정합니다.
    • 여기에는 Flask에서 렌더링할 HTML 파일이 포함됩니다.
    • 기본값은 templates입니다.

HTTP 메소드 지정

  • /login' 경로로 GET 요청이 들어오면 로그인 폼을 보여주고, POST 요청이 들어오면 로그인을 처리
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 로그인 처리
    else:
        return '''
            <form method="post">
                <p><input type=text name=username>
                <p><input type=password name=password>
                <p><input type=submit value=Login>
            </form>
        '''

템플릿 렌더링

  • '/hello/<name>' 경로로 요청이 들어오면 'hello.html' 템플릿을 렌더링하여 반환합니다. 템플릿에서는 name 변수를 사용할 수 있습니다.
from flask import render_template

@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)
  • JSON 데이터 return
    • 위 코드는 '/api/users' 경로로 요청이 들어오면 JSON 형식으로 사용자 목록을 반환합니다.
from flask import jsonify

@app.route('/api/users')
def get_users():
    users = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]
    return jsonify(users)

구체적 함수

Flask

  • Flask 클래스는 웹 애플리케이션을 만드는 데 사용되는 핵심 클래스로, Flask 애플리케이션 객체를 생성하는 역할을 합니다.
  • Flask 클래스를 사용하면 라우트 처리, 요청 및 응답 처리, 템플릿 렌더링 등을 처리할 수 있습니다.

jsonify

  • JSON 응답을 생성하기 위한 Flask 내장 함수 중 하나입니다.
  • 딕셔너리나 리스트 등의 객체를 JSON 형태로 변환하여 HTTP 응답 객체를 생성합니다.
from flask import jsonify

@app.route('/json')
def return_json():
    data = {'name': 'Alice', 'age': 20}
    return jsonify(data)

make_response

  • HTTP 응답 객체를 생성하는 함수입니다.
  • make_response 함수는 응답 헤더와 본문을 구성하는 파라미터를 받아서 HTTP 응답 객체를 반환합니다.
from flask import make_response

@app.route('/response')
def return_response():
    data = 'This is response data'
    response = make_response(data)
    response.headers['Content-Type'] = 'text/plain'
    return response

render_template

  • Flask 내장 함수 중 하나로, 템플릿 엔진을 이용하여 HTML 페이지를 렌더링하는 함수입니다.
  • render_template 함수는 HTML 템플릿 파일 이름과 함께 HTML 페이지를 반환합니다.
from flask import render_template

@app.route('/template')
def return_template():
    name = 'Alice'
    return render_template('template.html', name=name)

request

  • 현재 요청에 대한 정보를 담고 있는 객체입니다.
  • Flask 애플리케이션에서 요청 객체는 flask.request를 통해 사용할 수 있습니다.
  • request 객체는 HTTP 메소드, URL, 쿠키, 세션, 데이터 등을 포함합니다.
  • 예를 들어, HTTP GET 메소드로 /search URL에 접근하는 경우, request 객체는 다음과 같은 정보를 담고 있습니다.
from flask import request

@app.route('/search')
def search():
    keyword = request.args.get('q', '')
    return f'Searching for: {keyword}'
  • args는 URL의 쿼리 파라미터를 딕셔너리 형태로 담고 있습니다.
  • 위 코드에서는 q라는 이름의 쿼리 파라미터 값을 가져와 keyword 변수에 저장하고 있습니다.
  • 이렇게 request 객체를 사용하여 클라이언트가 보낸 데이터를 가져올 수 있습니다.

url_for

  • 라우트 함수명을 사용하여 해당 라우트의 URL을 생성하는 함수입니다.
  • 라우트 함수명 대신, URL 패턴 이름을 사용하여 URL을 생성하는 것도 가능합니다.
  • 다음과 같이 url_for 함수를 사용하여 index 뷰 함수의 URL을 생성할 수 있습니다.
from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def index():
    pass

with app.test_request_context():
    print(url_for('index'))
  • url_for 함수는 첫 번째 인자로 생성할 URL의 뷰 함수명을 받습니다.
  • 뷰 함수명은 문자열로 전달됩니다.
  • 이 함수를 호출할 때, Flask는 URL을 생성하기 위해 현재 요청 컨텍스트에서 URL 빌드를 시작합니다.
  • 요청 컨텍스트가 없는 경우 test_request_context 메서드를 사용하여 가상 요청 컨텍스트를 만들 수 있습니다.
  • 이렇게 생성된 URL은 print 함수로 출력됩니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글