Ich möchte Sitzungsdaten vom Flask-Teil an den Websocket-Teil meiner App senden. Ein vereinfachtes Beispiel ist:Flasch an Autobahn und verdreht: RuntimeError: Arbeit außerhalb des Anfragekontexts
from flask import session
class EchoServerProtocol(WebSocketServerProtocol):
def __init__(self):
self.user= session.get('user')
def onMessage(self, payload, isBinary):
_user=self.user
self.sendMessage(payload, isBinary, _user)
app = Flask(__name__)
app.secret_key = str(uuid.uuid4())
@app.route('/')
def page_home():
return render_template('index.html')
(adaptiert von here).
erhielt ich den Fehler:
File "app.py", line 171, in __init__
if session.get('user'):
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 297, in _get_current_object
return self.__local()
File "/usr/local/lib/python2.7/dist-packages/flask/globals.py", line 20, in _lookup_req_object
raise RuntimeError('working outside of request context')
exceptions.RuntimeError: working outside of request context
Ich bin nicht vertraut mit Autobahn, aber das Flask 'session' Objekt ist etwas magisch und ist nur verfügbar, wenn * Flask * eine Anfrage bearbeitet (oder wenn ein Flask-Anfrage-Kontext aktiv ist). In dem Code, den Sie verlinkt haben, behandelt Autobahn die Web-Sockets separat von Flask, das die regulären Anfragen bearbeitet. Sie könnten Flask-Sockets oder Flask-SocketIO verwenden, um Flask auf die Web-Sockets aufmerksam zu machen. – matts
In dem veröffentlichten Beispiel wird das EchoServerProtocol über index.html erreicht, daher ist es nicht vollständig getrennt. – Mostafa
Das Ergebnis des Renderings von 'index.html' wird clientseitig ausgeführt, nicht in einem Anforderungskontext auf der Serverseite. – davidism