λ‘κ·ΈμΈ 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 λλ€. (μνΈν€λ λ‘κ·ΈμΈμμ κ°μ Έμ¨ μνΈν€λ₯Ό 볡λΆνλ€)

>>> λλ¨Έμ§λ λ³κ²½ν΄μ€λ€
