# FLASK for MLOps

<s>대단한 뜻은 없고 MLOps 강의에 있는 플라스크 부분을 가져온 것 뿐이다</s>

# Flask

## Flask 시작하기

flask를 돌리기 위해 우선 flask를 설치해주어야한다.

```python
from flask import Flask

app = Flask(__name__)


@app.route("/")
def welcome():
    return "Welcome to this Flask course"


@app.route("/index")
def welcome_index():
    return "Welcome to this index page"


if __name__ == "__main__":
    app.run()
```

위 형식의 코드를 돌리면 웹브라우저에서 코드에 적어준 메시지들을 확인할 수 있다.

[`app.run`](http://app.run)`()` 부분에 [`app.run`](http://app.run)`(debug=True)` 옵션으로 설정해주면 서버 재시작 없이도 변경사항을 바로바로 반영할 수 있다.

## GET vs POST

Flask에서도 당연하겠지만 GET & POST를 이용해 클라이언트로부터 데이터를 받는데 둘의 차이점을 써보자면 아래와 같다.

`GET`: 주로 데이터 조회를 위해 사용 `POST`: 주로 데이터 생성, 변경, 삭제 등의 요청에 사용

## Jinja2 템플릿 엔진

`Jinja2`는 `Flask` 패키지에 내장된 템플릿 엔진이다. 동적 웹 페이지를 구성할 때 서버에서 곧바로 웹페이지 로딩과 동시에 변수 값을 할당해준다. 아래 문법에 따라 HTML 문서 상에서 반복문, 조건문을 사용 가능하다.

**작성법**:

```txt
{{ }} expressions to print output in html
{%...%} conditions, for loops
{#..#} this is for comments
```

## Dynamic URL

웹페이지를 이동할 때 다음 페이지의 URL을 url\_for() 함수에 넣어서 전달하거나 route 함수명을 넣어서 해당 route가 가지는 url 주소를 가져올 수 있다.

따라서 URL을 하드코딩하는 대신 url\_for에 함수 이름을 전달해서 정확한 URL을 얻을 수도 있는 것이다.

```python
@app.route('/submit',methods=['POST','GET'])
def submit():
    total_score=0
    if request.method=='POST':
        science=float(request.form['science'])
        maths=float(request.form['maths'])
        c=float(request.form['c'])
        data_science=float(request.form['datascience'])

        total_score=(science+maths+c+data_science)/4
    else:
        return render_template('getresult.html')
    return redirect(url_for('successres',score=total_score))
```
