ํค์๋
- Flask
- Jinja
- Template Engine
- Bootstrap
- ์น ์ดํ๋ฆฌ์ผ์ด์
Flask
- ํ์ด์ฌ์ ์ฌ์ฉํด ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ์น ํ๋ ์์ํฌ
- ์น ํ๋ ์์ํฌ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋๋ก ์น ์๋น์ค, ์น API ๊ทธ๋ฆฌ๊ณ ์น ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ ์ ์๋ ๋ฐฉ๋ฒ ์ ๊ณต
- ๋ฐ์ด๋ ์ ์ฐ์ฑ, ์์ฌ์ด ์ ์, ๊ฐ๋ณ๊ณ ์์ ์ฉ๋์ผ๋ก ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ๊ฐ๋ฅ => '๋ง์ดํฌ๋ก ์น ํ๋ ์์ํฌ'(์ต์ํ์ ๋๊ตฌ ๋ชจ์)
- ์๋์ ์ผ๋ก ๋ฌด๊ฑฐ์ด Django๊ฐ ์กด์ฌ
Flask ํ์ฉ(๊ธฐ๋ณธ)
- ํด๋ ๋ง๋ค๊ธฐ #
flask_app
์ด๋ผ๋ ํด๋ - ์ ํด๋ ์์
__init__.py
์์ฑ (์์ฑ์ ํ์ผ๋ก, flask_app ํด๋๋ฅผ ํจํค์งํ) __init__.py
from flask import Flask
app = Flask(name) # ์ฌ๊ธฐ์ name์ ์คํํ ํ์ผ์ ์ด๋ฆ์ด์ง๋ง, init.py์ ๊ฒฝ์ฐ ๋ณธ์ธ์ด ์ํ ํด๋์ ์ด๋ฆ์ด ๋จ
4. CLI๋ช
๋ น์ด๋ฅผ ํตํด flask_app ์์ ํด๋์์ ์คํ
```bash
FLASK_APP=flask_app flask run
๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก http://127.0.0.1:5000/
์ฆ, ๋ก์ปฌํธ์คํธ(127.0.0.1
)์ port๋ฒํธ 5000
๋ฒ์ผ๋ก ์กํ
Flask ํ์ฉ(๋ผ์ฐํฐ ์ถ๊ฐ)
__init__.py
์ ๋ด์ฉ ์์
from flask import Flask
app = Flask(__name__)
@app.route('/') # ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก์ปฌํธ์คํธ ์ฃผ์(`http://127.0.0.1:5000/`)์ ๋์๋ `/`๊ฐ ์์ต๋๋ค.
def index():
return 'Hello World!'
@app.route('/hello') # ์ด ๋๋ endpoint๊ฐ `/hello` ์ฆ, `http://127.0.0.1:5000/hello`์์ ์คํ๋์ด์ง
def hello():
return 'Hi Wordl!'
@app.route('/', methods=['POST', 'GET']) # ๋ฐ๋ก methods๋ฅผ ์ฃผ์ง ์์ผ๋ฉด GET, HEAD, OPTIONS 3๊ฐ์ง ๋ฉ์๋๊ฐ ํ์ฉ๋จ
def bye():
return 'bye bye'
@app.route('/index/<num>') # URL ์๋ํฌ์ธํธ์ ์ซ์๋ฅผ ์ฃผ๋ฉด ํด๋น ์ซ์๋ฅผ ๋ฃ์ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ(์๋ํฌ์ธํธ์ ์ธ์๋ฅผ ์ฃผ๋ ๋ฐฉ๋ฒ)
def index_numb(num):
return f"welcome to index {num}"
@app.route('/index/', defaults={ 'num' : 0 }) # ์๋ํฌ์ธํธ๋ก ์๋ฌด๊ฒ๋ ์ฃผ์ด์ง์ง ์์ ๋ 0 ์ ์ฃผ๋ ๋ฐฉ๋ฒ
@app.route('/index/<num>')
def index_number(num):
return f"welcome to index {num}"
์ด์ธ์๋
- ๋ธ๋ฃจํ๋ฆฐํธ : ๋ผ์ฐํฐ๋ค์ด ๊ณ์ ๋ง์์ง๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ ๋ผ์ฐํฐ๋ค์ ๋ฐ๋ก ๋ฌถ์ด๋์ด ๋ณด๊ดํ๋ ๊ธฐ๋ฅ
flask_app โโโ __init__.py โโโ routes โโโ user_routes.py
์์ ๊ฐ์ ๊ด๊ณ๋ก ํด๋ ๋ฐ ํ์ผ์ ๋ง๋ค์ด์ฃผ๊ณ
user_routes.py
from flask import Blueprint
bp = Blueprint('user', __name__, url_prefix='/user') # ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํฌ์ธํธ์ `/user`๊ฐ ๋ถ๊ฒ ์ค์
@bp.route('/')
def index():
return 'Hi, Jayden!'
__init__.py
from flask import Flask
from flask_app.routes import user_routes
app = Flask(__name__)
app.register_blueprint(user_routes.bp)
@app.route('/')
def index():
return 'Hi, Wolrd!'
http://127.0.0.1:5000/user
๋ก ์ ์ํ๋ฉด 'Hi, Jayden!' ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
์์ ๊ฐ์ด, ๊ฐ ๋ผ์ฐํธ๋ค ๋ณ๋ก ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋๋๊ณ ๊ฐ์ ์นดํ ๊ณ ๋ฆฌ์ ๋ผ์ฐํธ๋ค๋ผ๋ฆฌ ํ ํ์ผ์ bpํํ๋ก ์ ์ด์ฃผ์ด ๊ด๋ฆฌํฉ๋๋ค.
์ถ๊ฐ) Application Factory
ํ๋ก์ ํธ๊ฐ ์ปค์ง๊ณ ํ์ผ๋ค์ด ๋ง์์ง๋ฉด ํ์ผ๋ค(๋ชจ๋ํ๋ ํ์ผ๋ค)๋ผ๋ฆฌ importํ๋ ์ผ์ด ๋ง์์ง๋๋ค.
์ด ๋, import๋ฅผ ํ๋ค๋ณด๋ฉด ์๋ก circular import(์ฆ, ์๋ก ๋ง์น ๋ฌดํ๊ณ ๋ฆฌ์ฒ๋ผ import ์ํ์ ๋น ์ง๋ ๊ฒ)์ด ๋ฐ์
์ด๋ฅผ ์๋ฐฉํ๊ธฐ ์ํ ๊ฐ๋
์ด Application Factory์
๋๋ค.
์ฐธ๊ณ : ์ดํ๋ฆฌ์ผ์ด์
ํฉํ ๋ฆฌ
์ถ๊ฐ) Jinja
์ฐธ๊ณ : jinja2 ์์๋ณด๊ธฐ
์ฐธ๊ณ : Flask Template์ Jinja2 ์ฌ์ฉํ๊ธฐ
์ถ๊ฐ) ๋ถํธ์คํธ๋ฉ
์ฐธ๊ณ : ๋ถํธ์คํธ๋ฉ ๊ณต์ ํํ์ด์ง
Jinja์ ๋ถํธ์คํธ๋ฉ์ ๋ํด์ ๋ ์์ธํ ์ดํด๋ณผ ๊ฒ!
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]60-1. ์๊ฐ, ์ค์ผ์ฅด๋ง (0) | 2022.02.09 |
---|---|
[TIL]59.๋ฐฐํฌ(Heroku)์ ๋์๋ณด๋(Metabase) (0) | 2022.02.09 |
[TIL]57.Docker (0) | 2022.02.05 |
[TIL]56. Section3_Sprint2_Chall (0) | 2022.02.03 |
[TIL]55. NoSQL (0) | 2022.01.28 |