์ด๋ฒ ๋จธ์ ๋ฌ๋ ํ ํ๋ก์ ํธ ๋ฐ์ ์ค ๋์ ๊ณผ์ ์ธ flask-blueprint ๋ฅผ ์ ์ฉ์์ผ ๋ณด์๋ค.
๊ฐ์ฅ ๋จผ์ blueprint ๊ฐ ๋ญ์ง ์์๋ณด์.
๊ธฐ๋ณธ์ ์ธ ๋งค์ฐ ๊ฐ๋จํ ๊ตฌ์กฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ํด ์ค์ ๋ก ์๋น์คํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ค๋ฉด ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ฉด์ ๋ณต์กํด์ ธ ๊ธฐ๋ฅ์ ์ฐพ๊ธฐ ๋ค์ ์ด๋ ค์์ง๋ค. ๋ํ ํ ์๋น์ค๊ฐ ํ๋ผ์คํฌ ํ์ฅ์ ํฌํจํด ์ฌ๋ฌ ๊ฐ์ ํ๋ผ์คํฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ์ง๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
โ
์ด๋ ํ๋ผ์คํฌ์์๋ ๋ธ๋ฃจํ๋ฆฐํธ(Blueprint) ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ๋ธ๋ฃจํ๋ฆฐํธ ๊ฐ์ฒด๋ ํฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๋จ์ํ์ํค๊ณ ํ์ฅ ํ๋ก๊ทธ๋จ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก์ ์ํ ์ค์ฌ ์๋จ์ผ๋ก๋ ์ฌ์ฉ๋๋ค. ๋์ฅ๊ณ (Django)์ ๋ฌ๋ฆฌ url๋ค์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋ถ์ฌ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ์ด ํ์ํ ๋๋ง๋ค ๊ณ์ ์ถ๊ฐํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์๋ ํด๊ฒฐํด์ค๋ค.
โ
ํ๋ผ์คํฌ ๋ธ๋ฃจํ๋ฆฐํธ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ธ๋ฃจํ๋ฆฐํธ๋ณ URL ๊ท์น ์ค์ (์ ๋์ด ๋ฐ ์๋ธ๋๋ฉ์ธ)
- ๋ธ๋ฃจํ๋ฆฐํธ๋ณ URL ํธ๋ค๋ฌ ์ค์ (before_request ๋ฑ)
- ๋ธ๋ฃจํ๋ฆฐํธ๋ณ ์ ์ ํ์ผ ๋ฐ ํ
ํ๋ฆฟ ํํฐ์ ํด๋ ์ค์
๋ผ๊ณ ํ๋ค.
์ฝ๊ฒ ๋งํด์ ์๋์ฐ์ ๊ฒ์์ ๊ฒ์๋ณ๋ก ์ฌ์ง์ ์ฌ์ง๋ณ๋ก ๋ฑ ๊น๋ํ๊ฒ ํด๋๋ฅผ ์ ๋ฆฌ ํ๋ฏ์ด ํ๋ก์ ํธ ํ์ผ๋ค๋ ์ ๋ฆฌํด์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ป๊ฒ ์ ์ฉ์์ผฐ๋์ง ํ ๋ฒ ๋ณด์.
run.py
์คํํ๋ ํฌํธ๋ฅผ ์ง์ ํ๋ค.
from main import app
if __name__ == '__main__':
app.run('0.0.0.0', port=9999, debug=True)
__init__.py
app ์ ๊ฐ์ฒด ์ ์ธ, ๊ฐ์ข
๋ชจ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ธ๋ฃจํ๋ฆฐํธ ์ค์
app.register_blueprint() ๋ฅผ ํตํด ์ฐ๊ฒฐ
# app ๊ฐ์ฒด ์ ์ธ, ๊ฐ์ข
๋ชจ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ธ๋ฃจํ๋ฆฐํธ ์ค์
from datetime import datetime, timedelta
from functools import wraps
import hashlib
import json
import re
from unittest import result
from bson import ObjectId
from flask import Flask, abort, jsonify, request, Response, Blueprint
from flask_cors import CORS # flask ์ฐ๊ฒฐ
from pymongo import MongoClient # DB
import jwt
# from flask import g
from . import member # member ํธ์ถ
# ๊ฐ์ฒด ์ ์ธ
app = Flask(__name__) # app ๊ฐ์ฒด ์ ์ธ
cors = CORS(app, resources={r"*": {"origins": "*"}})
client = MongoClient('localhost', 27017)
db = client.ladder
# url ์ฐ๊ฒฐ
app.register_blueprint(member.blueprint)
config.py(DB, ์ํฌ๋ฆฟํค ๋ฑ)
๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ DB ๋ฅผ ํจ์ํ ํ์ฌ return ํด์ค๋ค.
from pymongo import MongoClient # DB
SECRET_KEY = ''
def get_db():
client = MongoClient('localhost', 27017)
return client.ladder
def get_key():
return SECRET_KEY
member.py (์ฐ๊ฒฐํ๊ณ ์ ํ๋ .py)
์คํํ๊ณ ์ ํ๋ ํจ์๋ฅผ ๋ชจ์๋ ๊ฒฝ๋ก๋ฅผ @blueprint.route() ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ,
__init__.py ๋ก ๋๊ฒจ์ค blueprint = Blueprint("member", __name__, url_prefix='') ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ค.
from main import *
from flask import Blueprint
from . import config
db = config.get_db()
SECRET_KEY = config.get_key()
blueprint = Blueprint("member", __name__, url_prefix='')
@blueprint.route('/')
@authorize # decorated ํจ์ ์ ์ฉ
def index(user):
# print(user)
return jsonify({'message': 'success'})
์ด๋ ค์ ๋ ์
๊ตฌ๊ธ๋ง์ ํตํด์ ์ ์ฉ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ง์ด ์ฐพ์๋ณด์๋๋ฐ ์๊ฐ๋ณด๋ค ๋๋ฌด ๋จ์ํ๊ฒ ์๋ ค์ง ๋๋์ด์๋๋ฐ ๋ง์ ์ ์ฉํด๋ณด๋ ์ด๋ ต๋๋ผ.
1) DB ์ฐ๊ฒฐ ๋ฌธ์ & SECRET_KEY
__init__.py ์ ํ๋ฒ์ ๋ค ๋ฃ์ด์ฃผ๋ฉด ๋๋ ์ค๋ก๋ง ์์๋๋ฐ, ์๋๋๋ผ. ๊ทธ๋์ ํํฐ๋๊ป ์ง๋ฌธํด๋ณด๋ db.py ๋ง์ ํ์ผ๋ก ๋ง๋ค์ด ํจ์๋ก ์ด์ฃผ๋ฉด ์ด๋จ๊น ํ์
์ ํด๋ดค๋ค. ์ ๋์๋ค ^^
2) from & import ํ ๋ถ๋ถ์ ๊ผญ๊ผญ ํ์ธํ ๊ฒ
๊ฒฐ๊ตญ ํ์ผ๋ง๋ค ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๊ณ ์๋ from & import ๋ ์์นซ ์คํ๋ฅผ ๋ด์ด์ ์๋ฌ๊ฐ ๋๋ ์ํฉ์ ๋ด์ฉ ํ์ผ๋ก ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๊ผญ๊ผญ ์์๋ ํ์ธํ ํ์๊ฐ ์๋ค.