2016-11-14 1 views
0

저는 Flask Session을 실행 중이며 Eve를 API로 사용하고 있습니다. 세션 코드를 위해 나는 나는 이브 API가/API를 아래에, 나는 적어도 그 요청에 대해 새로운 세션을 시작하지 않도록하려면 여기 https://pythonhosted.org/Flask-Session/함수 내에서 Flask로 세션을 시작할 수 없습니다.

from flask import Flask, session 
from flask.ext.session import Session 

app = Flask(__name__) 
# Check Configuration section for more details 
SESSION_TYPE = 'redis' 
app.config.from_object(__name__) 
Session(app) 

@app.route('/set/') 
def set(): 
    session['key'] = 'value' 
    return 'ok' 

@app.route('/get/') 
def get(): 
    return session.get('key', 'not set') 

의 예를 다음과 같은거야.

request.environ [ 'PATH_INFO']이 '/ api /'로 시작하지 않을 때만 세션을 시작하고 싶을 때마다 Session()을 넣을 때마다 실패합니다. 예 다음

:

sess = Session() 
sess.init_app(app) 

내가 before_request 또는 유사한에서, 나는이 얻을 수행하려고 : 나는 정상적인 컨텐츠 생성에 세션을 시작하려고하면

A setup function was called after the first request was handled. 

및 얻을 수있는 것 :

AttributeError: 'SecureCookieSession' object has no attribute 'sid' 

경로/환경/etc에 따라 세션을 조건부로 시작할 수 있습니까? ?

import flask 
import xml.etree.ElementTree as ElementTree 
from bson.objectid    import ObjectId 
from random      import shuffle, choice as pick 
from cgi      import escape as escapehtml 
from time      import mktime 
from urllib      import quote as escapeurl, unquote_plus as unescapeurl 
from flask      import Flask, request, session, render_template, send_from_directory, jsonify, redirect, abort 
from flask.ext.session   import Session 
from flask.ext.login   import LoginManager, login_user, logout_user, current_user, UserMixin, user_logged_in, login_required, fresh_login_required 
from itsdangerous    import TimedJSONWebSignatureSerializer as Serializer, BadSignature, SignatureExpired, URLSafeTimedSerializer 
from flask_mail     import Mail, Message 
from wtforms     import Form, BooleanField, PasswordField 
from flask.ext.mongoengine  import MongoEngine 
from flask.ext.security   import Security, MongoEngineUserDatastore, RoleMixin, UserMixin 
from flask.ext.principal  import Principal, Permission, RoleNeed 
from flask_security.forms  import RegisterForm, Required, StringField 
from flask_images    import Images 
from eve      import Eve 
from eve.auth     import TokenAuth 
from flask.ext.moment   import Moment 
from eve.io.mongo    import Validator 
from flask.ext.cors    import CORS, cross_origin 
from app.admin.one1    import one1 
from app.emails.emails   import emails 
from app.alligator.alligator import alligator 
from app.data.ndm_feed.ndm_feed import ndm_feed 
from flask.ext     import excel 

... 
login_serializer = URLSafeTimedSerializer(app.secret_key) 
login_manager = LoginManager() 

app.config.from_object(__name__) 
login_manager.init_app(app) 
Session(app) 

나는이 같은 일을하려고 API 호출에 대한 세션을 시작 피하기 위해 :

나의 현재 코드는 다음과 같습니다

@app.before_request 
def before_request(): 
    if not request.environ['PATH_INFO'].startswith('/api/'): 
     Session(app) 

또는 동등 :

@app.before_request 
def before_request(): 
    if not request.environ['PATH_INFO'].startswith('/api/'): 
     sess = Session() 
     sess.init_app(app) 

하지만 위의 오류없이 수행 할 수있는 방법을 찾을 수 없습니다.

경로/환경/기타에 따라 조건부로 Flask 세션을 시작할 수 있습니까?

답변

0

실제로 앱을 사용하기 전에 이미 만들었습니다 : @app.before_request 그래서 새로운 구성이나 확장 프로그램을 추가하는 것이 늦었습니다. 부 청사진으로 수행 할 수 있습니다.

# api.py 
from flask import Blueprint 
from flask_session import Session 

sess = Session() 

api = Blueprint('api', __name__) 

# yourapp.py 
... 
def create_app(): 
    ... 
    try: 
     from api import api, sess 
     sess.init_app(app) 
     app.register_blueprint(api) 

# views.py 
@api.route('/set/') 
def set(): 
    session['key'] = 'value' 
    return 'ok 
+0

감사합니다. 이 경우에는 내가 현재 청사진을 통해 이브를 실행할 수 있다고 생각하지 않지만 https://github.com/nicolaiarocci/eve/issues/227로 인해 –

관련 문제