기록과 정리의 공간

[프로젝트] Flask로 게시판 만들기 - 5 본문

프로젝트/게시판1

[프로젝트] Flask로 게시판 만들기 - 5

딸기맛도나쓰 2020. 8. 7. 22:12

Flask로 게시판 만들기 - 5 (참고 강의 링크-인프런 강의)
(공부 하며 기록이 필요한 부분들만 정리함)

  • 개발 환경 : windows 10 / Python 3.8.1 / vscode
  1. 로그인 기능 구현하기 (세션 활용)

1. 로그인 기능 구현하기 (세션 활용)

  • HTTP는 클-서간의 연결 상태를 계속 유지하지 않는 무상태(stateless) 프로토콜이다. 즉, 요청 간 사용자 데이터를 저장하는 수단을 제공하지 않는다. 따라서, 세션(은 기본적으로 하나의 요청 정보를 다른 요청에서 기억하게 해줌)을 활용하여 서버에서 클라이언트를 특정할 수 있도록한다.

  • Flask - 세션(Sessions) 활용하기 : (공식 문서 링크)

    • 현재 세션에 접근하기 위해서는 flask의 session객체(flask.session)를 사용한다. 세션 객체는 보통 딕셔너리 객체와 상당히 비슷하게 동작한다.
    • session.permanentTrue로 지정하면, PERMANENT_SESSION_LIFETIME configuration key에 설정한 값 만큼 session이 유지되게 된다. default값은 timedelta(days=31)(1달)이다. (permanent_session_lifetime에 대한 공식 문서 링크)
      • 세션 유지 시간을 지정해주는 이유? 세션은 서버에 저장되는 변수들이다. 사용자가 일정 기간 동안 사이트를 다시 방문하지 않는다면, 이 변수들을 제거해줘야 서버의 자원을 효율적으로 사용할 수 있다. 그러므로 세션의 유지 시간을 지정해주는 것은 중요하다.
  • 로그인 기능 구현에 활용하기 - 예시 코드 (전체 코드x , 일부 코드만 가져옴)

from flask import session
from datetime import timedelta 
(나머지 import 생략)

(중략)

app.config["SECRET_KEY"] = "abcd" # 예시라 간단한 값으로 지정했지만, 실제로는 이런 단순한 값 사용하면 절대 X
app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(minutes=30) # 세션유지 시간을 30분으로 지정

(중략)

@app.route("/login", methods=["GET", "POST"])
def member_login():
    if request.method == "POST":
        name = request.form.get("name")
        password = request.form.get("pass")

        if name == "" or pass1 == "":
            flash("입력되지 않은 값이 있습니다!")
            return render_template("login.html")

        members = mongo.db.members
        data = members.find_one({"email": email})

        if data is None:
            flash("회원 정보가 없습니다!")
            return redirect(url_for("member_login"))
        else:
            if data.get("pass") == password:
                # session에 로그인 정보 저장하기
                session["email"] = email
                session["name"] = dage.get("name")
                session["id"] = str(data.get("_id"))
                session.permanet = True # 세션 유지 시간 지정을 위해 True로 설정
            else:
                flash("비밀번호가 일치하지 않습니다!")
                return redirect(url_for("member_login"))
        return ""
    else:
        return render_template("login.html")
Comments