๋ก๊ทธ์ธ API ๋ง๋ค๊ธฐ
app.py์ ์ฝ์
from resources.user import UserLoginResource
api.add_resource( UserLoginResource, '/users/login')
app.py ํ์ผ์ ์ถ๊ฐ
from flask_jwt_extended import JWTManager
from config import Config
# app = Flask(__name__) ์๋์ ์ถ๊ฐ
# ํ๊ฒฝ๋ณ์ ์
ํ
app.config.from_object(Config)
# JWT ๋งค๋์ ์ด๊ธฐํ
jwt = JWTManager(app)
# api = Api(app) ์์ ์ถ๊ฐ
user.py์ ์ฝ์
from utils import check_password #4์์ ์ฝ์
from flask_jwt_extended import create_access_token
class UserLoginResource(Resource) :
def post(self) :
# 1. ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ค.
data = request.get_json()
if 'email' not in data or 'password' not in data:
return {'result' : 'fail'}, 400
if data['email'].strip() == '' or data['password'].strip() == '':
return {'result' : 'fail'}, 400
# 2. DB๋ก๋ถํฐ ์ด๋ฉ์ผ์ ํด๋นํ๋ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
try :
connection = get_connection()
query = '''select *
from user
where email = %s ;'''
record = ( data['email'] , )
cursor = connection.cursor(dictionary=True)
cursor.execute(query, record)
result_list = cursor.fetchall()
print(result_list)
cursor.close()
connection.close()
except Error as e:
if cursor is not None:
cursor.close()
if connection is not None:
connection.close()
return {'result':'fail', 'error':str(e)},500
# 3. ํ์์ธ์ง ํ์ธํ๋ค.
if result_list == [] :
return {'result' : 'fail'} , 401
# 4. ๋น๋ฐ๋ฒํธ๋ฅผ ์ฒดํฌํ๋ค.
# ์ ์ ๊ฐ ์
๋ ฅํ ๋น๋ฒ data['password']
# DB์ ์ํธํ๋ ๋น๋ฒ result_list[0]['password']
isCorrect = check_password(data['password'] , result_list[0]['password'])
if isCorrect == False :
return {'result' : 'fail'} , 401
# 5. ์ ์ ์์ด๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
user_id = result_list[0]['id']
# 6. JWT ํ ํฐ์ ๋ง๋ ๋ค.
access_token = create_access_token(user_id)
# 7. ํด๋ผ์ด์ธํธ์ ์๋ตํ๋ค.
return {'result' : 'success', 'access_token':access_token}
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์ฌ์ฉํ ์ ์๋๋ก API์ ํ ํฐ ์ ์ฉํ๊ธฐ
recipe.py์ ์ฝ์
from flask_jwt_extended import get_jwt_identity, jwt_required
(1). Class RecipeListResource ์ def post : ๋ฐ์ดํฐ ์์ฑํ๊ธฐ
(2). Class RecipeListResource ์ def get : ๋ฐ์ดํฐ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ
(3). class RecipeResource์ def get : ํน์ id ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
# 2-2 ์ฝ์ ํ๊ณ , # 3 ~ ์ญ์ ํ๊ธฐ
(4). class RecipeResource์ def put : ํน์ id ๋ฐ์ดํฐ ์์ ํ๊ธฐ
(5). class RecipeResource์ def delete : ํน์ id ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ
(6). class RecipePublishResource์ def put : ๋ ์ํผ ๋ฐํ (publish =1)
(7). class RecipePublishResource์ def delete : ๋ ์ํผ ๋ฐํ ์ทจ์ (publish =0) : ์์์ ์ฅ
์ ์ฅํ๊ณ flask run
>>>> ์ฌ์ฉํ API์ Headers๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.
Body์ Value๋ฅผ Bearer + ์ํธํค ๋ฃ๊ณ sendํ๋ฉด success ๋๋ค. (์ํธํค๋ ๋ก๊ทธ์ธ์์ ๊ฐ์ ธ์จ ์ํธํค๋ฅผ ๋ณต๋ถํ๋ค)
>>> ๋๋จธ์ง๋ ๋ณ๊ฒฝํด์ค๋ค