인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

eotjd155님의 프로필 이미지
eotjd155

작성한 질문수

가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]

user_loader 관련

작성

·

272

0

안녕하세요. 블로그 구독 기능 구현하기 강의 13분 50초 경에 밑의 blog_abtest.py 파일에서 load_user 함수에 user_id 인자는 flask login이 http request에서 자동으로 id 추출한다고 하셨는데 궁금한 게 있습니다.

1. 추출되는 대상은 User(UserMixin)에서 만든 user 객체인가요 ?

2. 자동으로 id를 추출한다고 했는데 만약 대상이 id가 아닌 다른걸로 하고 싶다면 어떻게 설정하나요? 예를 들어 email을 받아서 User.get함수에서 인자로 사용하고 싶다거나?

@login_manager.user_loader
def load_user(user_id):
    return User.get(user_id)

답변 1

1

안녕하세요. 답변도우미입니다.

1. 추출대상은 User.get() 의 리턴값인 User 객체입니다. 다음 실제 User 클래스를 보시면 이해하실 수 있지 않을까 합니다.

@staticmethod

def get(user_id):

mysql_db = conn_mysqldb()

db_cursor = mysql_db.cursor()

sql = "SELECT * FROM user_info WHERE USER_ID = '" + str(user_id) + "'"

# print (sql)

db_cursor.execute(sql)

user = db_cursor.fetchone()

if not user:

return None

user = User(user_id=user[0], user_email=user[1], blog_id=user[2])

return user

2. email 로 User 객체를 가져오고 싶다면, 별도로 이와 관련한 메서드를 구현해야할 것 같은데요. 아마도 유사한 메서드가 다음 User 의 find 메서드가 아닐까 하는데요. 이와 같이 별도로 메서드를 구현하면 될 것 같습니다.

def find(user_email):

mysql_db = conn_mysqldb()

db_cursor = mysql_db.cursor()

sql = "SELECT * FROM user_info WHERE USER_EMAIL = '" + \

str(user_email) + "'"

# print (sql)

db_cursor.execute(sql)

user = db_cursor.fetchone()

if not user:

return None

user = User(user_id=user[0], user_email=user[1], blog_id=user[2])

return user

감사합니다.

eotjd155님의 프로필 이미지
eotjd155

작성한 질문수

질문하기