Jayden1116
Jayden`s LifeTrip ๐Ÿ”†
Jayden1116
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • Jayden`s (481)
    • ๐Ÿฏ Hello, Jayden (144)
      • ์ผ๊ธฐ (1)
      • ์‹ ๋ฌธ (121)
      • ์Œ์•… (6)
      • ๊ฒฝ์ œ (16)
    • ๐Ÿ’› JavaScript (88)
      • ์ด๋ชจ์ €๋ชจ (4)
      • ๋ฐฑ์ค€ (44)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (40)
      • ๋ฒ„๊ทธ (0)
    • ๐ŸŽญ HTML CSS (6)
      • ํํŠธ๋ฏ€๋ฅด (2)
      • ํฌ์Šค์Šค (4)
    • ๐Ÿ’ป CS (13)
      • ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1)
      • ๋„คํŠธ์›Œํฌ (9)
      • ์šด์˜์ฒด์ œ (1)
      • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค (0)
      • ๋””์ž์ธ ํŒจํ„ด (1)
    • ๐Ÿ Python (71)
      • ๋ฐฑ์ค€ (67)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
    • ๐Ÿ’ฟ Data (156)
      • ์ด๋ชจ์ €๋ชจ (65)
      • ๋ถ€ํŠธ์บ ํ”„ (89)
      • ๊ทธ๋กœ์Šค ํ•ดํ‚น (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿ”ด ๋ธ”๋กœ๊ทธ(ํ™ˆ)
  • ๐Ÿฑ Github
  • ๊ธ€์“ฐ๊ธฐ
  • ํŽธ์ง‘
hELLO ยท Designed By JSW.
Jayden1116

Jayden`s LifeTrip ๐Ÿ”†

๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„

[TIL]58.Flask

2022. 2. 8. 00:57

ํ‚ค์›Œ๋“œ

  • Flask
  • Jinja
  • Template Engine
  • Bootstrap
  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

Flask

  • ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•ด ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ž€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์›น ์„œ๋น„์Šค, ์›น API ๊ทธ๋ฆฌ๊ณ  ์›น ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ œ๊ณต
  • ๋›ฐ์–ด๋‚œ ์œ ์—ฐ์„ฑ, ์†์‰ฌ์šด ์ œ์ž‘, ๊ฐ€๋ณ๊ณ  ์ž‘์€ ์šฉ๋Ÿ‰์œผ๋กœ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘ ๊ฐ€๋Šฅ => '๋งˆ์ดํฌ๋กœ ์›น ํ”„๋ ˆ์ž„์›Œํฌ'(์ตœ์†Œํ•œ์˜ ๋„๊ตฌ ๋ชจ์Œ)
  • ์ƒ๋Œ€์ ์œผ๋กœ ๋ฌด๊ฑฐ์šด Django๊ฐ€ ์กด์žฌ

Flask ํ™œ์šฉ(๊ธฐ๋ณธ)

  1. ํด๋” ๋งŒ๋“ค๊ธฐ # flask_app ์ด๋ผ๋Š” ํด๋”
  2. ์œ„ ํด๋” ์•ˆ์— __init__.py ์ƒ์„ฑ (์ƒ์„ฑ์ž ํŒŒ์ผ๋กœ, flask_app ํด๋”๋ฅผ ํŒจํ‚ค์ง€ํ™”)
  3. __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}"

์ด์™ธ์—๋„

  1. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ : ๋ผ์šฐํ„ฐ๋“ค์ด ๊ณ„์† ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๋ผ์šฐํ„ฐ๋“ค์„ ๋”ฐ๋กœ ๋ฌถ์–ด๋‘์–ด ๋ณด๊ด€ํ•˜๋Š” ๊ธฐ๋Šฅ
    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
    '๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [TIL]60-1. ์‹œ๊ฐ„, ์Šค์ผ€์ฅด๋ง
    • [TIL]59.๋ฐฐํฌ(Heroku)์™€ ๋Œ€์‹œ๋ณด๋“œ(Metabase)
    • [TIL]57.Docker
    • [TIL]56. Section3_Sprint2_Chall
    Jayden1116
    Jayden1116
    ์•„๋งˆ๋„ ํ•œ๋ฒˆ ๋ฟ์ธ ์ธ์ƒ์„ ์—ฌํ–‰ ์ค‘์ธ Jayden์˜ ์ผ์ง€๐Ÿ„๐ŸŒŠ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”