在 gunicorn 的 Plotly Dash 运行 中获取请求 header
Get the request header in Plotly Dash running in gunicorn
这与有关,但解决方案不起作用。
我有 SSO 身份验证,通过用户名传递请求 header。在 Flask 应用程序中,我可以使用 flask.request.headers['username'] 取回用户名。在 Dash 中,我收到服务器错误。这是 Dash 应用程序 - 它正在使用 gunicorn。
import dash
from dash import html
import plotly.graph_objects as go
from dash import dcc
from dash.dependencies import Input, Output
import flask
from flask import request
server = flask.Flask(__name__) # define flask app.server
app = dash.Dash(__name__, serve_locally=False, server=server)
username = request.headers['username']
greeting = "Hello " + username
app.layout = html.Div(children=[
html.H1(children=greeting),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Graph(
id='example-graph',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
],
'layout': {
'title': 'Dash Data Visualization'
}
}
)
])
if __name__ == '__main__':
app.run_server()
如有任何帮助,我们将不胜感激。
您只能从请求上下文中访问 request
对象。在 Dash 术语中,这意味着 来自回调 。这是一个小例子,
from dash import html, Input, Output, Dash
from flask import request
app = Dash(__name__)
app.layout = html.Div(children=[
html.Div(id="greeting"),
html.Div(id="dummy") # dummy element to trigger callback on page load
])
@app.callback(Output("greeting", "children"), Input("dummy", "children"))
def say_hello(_):
host = request.headers['host'] # host should always be there
return f"Hello from {host}!"
if __name__ == '__main__':
app.run_server()
这与
我有 SSO 身份验证,通过用户名传递请求 header。在 Flask 应用程序中,我可以使用 flask.request.headers['username'] 取回用户名。在 Dash 中,我收到服务器错误。这是 Dash 应用程序 - 它正在使用 gunicorn。
import dash
from dash import html
import plotly.graph_objects as go
from dash import dcc
from dash.dependencies import Input, Output
import flask
from flask import request
server = flask.Flask(__name__) # define flask app.server
app = dash.Dash(__name__, serve_locally=False, server=server)
username = request.headers['username']
greeting = "Hello " + username
app.layout = html.Div(children=[
html.H1(children=greeting),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Graph(
id='example-graph',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
],
'layout': {
'title': 'Dash Data Visualization'
}
}
)
])
if __name__ == '__main__':
app.run_server()
如有任何帮助,我们将不胜感激。
您只能从请求上下文中访问 request
对象。在 Dash 术语中,这意味着 来自回调 。这是一个小例子,
from dash import html, Input, Output, Dash
from flask import request
app = Dash(__name__)
app.layout = html.Div(children=[
html.Div(id="greeting"),
html.Div(id="dummy") # dummy element to trigger callback on page load
])
@app.callback(Output("greeting", "children"), Input("dummy", "children"))
def say_hello(_):
host = request.headers['host'] # host should always be there
return f"Hello from {host}!"
if __name__ == '__main__':
app.run_server()