2017-09-04 11 views
0

Python 응용 프로그램에서 Flask-Session을 구현하려고합니다. 나는 설명서에서 NullSessionInterface 대신에 SqlAlchemySessionInterface과 같은 다른 인터페이스를 사용하도록 권유했다. 이것은 SESSION_TYPE 구성 키에 아무 것도 제공되지 않을 때 사용된다. 클래스 세션에서 flask_session에서 Flask-Session을 사용하기 위해 세션 테이블을 생성해야합니까? SqlAlchemySessionInterface

/ 초기화 평 파일이 사용하는 기본 플라스크-세션으로

을 읽 클래스 : NullSessionInterface, 당신은 정말 다른 SessionInterface을 사용하도록 응용 프로그램을 configurate해야한다.

"sqlalchemy"SESSION_TYPE 구성 키를 설정 한 후 나는 오류를 얻을

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "sessions" does not exist 

이 플라스크-세션 내 데이터베이스 모델의 이름은 "세션"으로 테이블을 사용하여 찾고 있음을 나타냅니다하지만 난 할 수 없습니다 Flask-Session 문서에서 어디서나 테이블이 만들어 져야하고 어떤 필드가 있어야하는지 알려줍니다.

누구나 해결책을 제안 할 수 있습니까?

답변

0

는 플라스크-세션을 공부 한 후/__init__이 플라스크 - SQLAlchemy의 모델 class Session(self.db.Model)를 포함하고 그 아래에 내가 그 클래스 SqlAlchemySessionInterface 발견 평 코드를 초기화하기. 이 테이블 모델을 만들려면 파일을 만든 후 SqlAlchemySessionInterfaceflask_session에서 가져온 다음 SqlAlchemySessionInterface(myApp, sqlAlchemyDbObject, "table_name", "prefix_") 을 입력 한 다음 db.create_all()을 실행했습니다.

class SqlAlchemySessionInterface(SessionInterface): 
"""Uses the Flask-SQLAlchemy from a flask app as a session backend. 

.. versionadded:: 0.2 

:param app: A Flask app instance. 
:param db: A Flask-SQLAlchemy instance. 
:param table: The table name you want to use. 
:param key_prefix: A prefix that is added to all store keys. 
:param use_signer: Whether to sign the session id cookie or not. 
:param permanent: Whether to use permanent session or not. 
""" 

serializer = pickle 
session_class = SqlAlchemySession 

def __init__(self, app, db, table, key_prefix, use_signer=False, 
      permanent=True): 
    if db is None: 
     from flask_sqlalchemy import SQLAlchemy 
     db = SQLAlchemy(app) 
    self.db = db 
    self.key_prefix = key_prefix 
    self.use_signer = use_signer 
    self.permanent = permanent 

    class Session(self.db.Model): 
     __tablename__ = table 

     id = self.db.Column(self.db.Integer, primary_key=True) 
     session_id = self.db.Column(self.db.String(255), unique=True) 
     data = self.db.Column(self.db.LargeBinary) 
     expiry = self.db.Column(self.db.DateTime) 

     def __init__(self, session_id, data, expiry): 
      self.session_id = session_id 
      self.data = data 
      self.expiry = expiry 

     def __repr__(self): 
      return '<Session data %s>' % self.data 

    # self.db.create_all() 
    self.sql_session_model = Session 

확실히 다음 프로젝트에 장고를 사용하고 있습니다. 많은 Flask Extensions에 대한 문서는 전혀 훌륭하지 않습니다.