• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

user_loader 관련

22.10.19 13:16 작성 조회수 186

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

답변을 작성해보세요.

0

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

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

감사합니다.