Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果从flask创建并调用Dash应用程序,则Dash回调不起作用_Flask_Plotly Dash - Fatal编程技术网

如果从flask创建并调用Dash应用程序,则Dash回调不起作用

如果从flask创建并调用Dash应用程序,则Dash回调不起作用,flask,plotly-dash,Flask,Plotly Dash,Dash应用程序在创建并通过flask服务器调用时失败。Dash的回调不起作用,发出Post请求400。非常感谢您的帮助 下面是重现该问题的示例代码。我使用最新的Dash 0.22.0、Dash HTML组件0.11.0、Dash核心组件0.24.1和Flask 1.0.2: # file 'simple_flask.py' from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_wtf.csrf i

Dash应用程序在创建并通过flask服务器调用时失败。Dash的回调不起作用,发出Post请求400。非常感谢您的帮助

下面是重现该问题的示例代码。我使用最新的Dash 0.22.0、Dash HTML组件0.11.0、Dash核心组件0.24.1和Flask 1.0.2:

# file 'simple_flask.py'

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_wtf.csrf import CSRFProtect


# Initialise flask App 
app = Flask(__name__, instance_relative_config=True)
#app.config.from_object('config.Config')

db = SQLAlchemy()         # SQLAlchemy
csrf_protect = CSRFProtect()

def set_app(app):

    # Setup WTForms CSRFProtect
    app.secret_key = 'My super secret key'
    csrf_protect.init_app(app)

    # Setup Flask-SQLAlchemy
    db.init_app(app) 

    # run in app context
    with app.test_request_context():
        db.create_all()

        from simple_dash import create_dash
        create_dash(app)


if __name__ == '__main__':
    set_app(app)
    app.run(host='127.0.0.1', port=5002, debug=True) 


## file 'simple_dash.py'

import dash
import dash_html_components as html
import dash_core_components as dcc

def create_dash(app):
    dash_app = dash.Dash(__name__, server=app, 
                        #static_folder='/static',
                        #url_base_pathname='/app/oga/', 
                        # csrf_protect=False
                        )
    dash_app.layout = html.Div([
        dcc.Dropdown(
            id='my-dropdown',
            options=[
                {'label': 'New York City', 'value': 'NYC'},
                {'label': 'Montreal', 'value': 'MTL'},
                {'label': 'San Francisco', 'value': 'SF'}
            ],
            value='NYC'
        ),
        html.Div(id='output-container')
    ])


    @dash_app.callback(
        dash.dependencies.Output('output-container', 'children'),
        [dash.dependencies.Input('my-dropdown', 'value')])
    def update_output(value):
        return 'You have selected "{}"'.format(value)

加载页面和下拉列表中任何后续更改后缺少的参考是:“POST/_dash-update-component HTTP/1.1”400。

从dash github的@T4rk1n开始,这是CSRFProtect烧瓶扩展和dash之间的冲突。以下显示了如何从CSRFProtect中排除Dash:

csrf\u protect=CSRFProtect()

csrf\u protect.\u emption\u views.add('dash.dash.dispatch')

谢谢您,先生,这个答案是值得的。