从浏览器中创建的表中提取python的用户输入?

时间:2017-08-07 06:31:36

标签: python html bokeh

我想在浏览器中创建一个用python创建的表。可以使用DataTable库的bokeh来完成该部分。问题是我想在用户在表格中输入他/她的输入时从表格中提取数据。 我可以使用任何python库来做到这一点?如果我能用散景做这件事会更好。

3 个答案:

答案 0 :(得分:0)

您可以使用BeautifulSoup来解析HTML内容,see this example

答案 1 :(得分:0)

如果您的要求是使用Python创建应用程序,用户将通过浏览器访问并将某些数据更新到表中?

使用Django或任何Web框架,基本上,您正在尝试构建一个Web应用程序!!

如果您正在寻找其他内容,请彻底提及您的要求。

答案 2 :(得分:0)

散景中使用的光滑网格数据表可以由用户直接编辑:http://bokeh.pydata.org/en/latest/docs/reference/models/widgets.tables.html

由于数据表的每一列的数据可以对应于ColumnDataSource的字段,因此可以创建python或javascript回调,以检测表中数据值的任何更改。然后,您可以访问所需用例的更新数据。

以下是编辑数据时使用javascript回调的示例。编辑数据时,更新的列将打印到浏览器控制台。请注意,它只会在您编辑值然后单击单元格后检测到已更改的数据。

如果你想根据用户输入在python函数外运行,你可以使用python回调完全相同。这确实需要运行散景服务器才能工作。

from datetime import date
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource, CustomJS
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, StringEditor

output_file("data_table.html")

data = dict(
        dates=[date(2014, 3, i+1) for i in range(10)],
        strings=['edit_this' for i in range(10)],
    )
source = ColumnDataSource(data)

columns = [
        TableColumn(field="dates", title="Date", formatter=DateFormatter()),
        TableColumn(field="strings", title="Downloads", editor=StringEditor()),
    ]

data_table = DataTable(source=source, columns=columns, width=400, height=280,
                       editable=True)

# callback code to detect user edit of table
code = """
    data = source.data
    console.log('data has been updated!')
    console.log(data['strings'])
"""

callback = CustomJS(code=code,args={'source':source})
source.js_on_change('data', callback)

show(widgetbox(data_table))

修改

这是一个使用python回调的类似示例。编辑单元格时,在此示例中将替换所有单元格。显然你可以做你想做的事情,这只是一个例子。

您需要在源上设置回应以响应数据中的更改。因此source.on_change('data', update)。例如,请阅读更多http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/widgets.html#adding-widgets

from datetime import date
from bokeh.io import curdoc
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, StringEditor

data = dict(
        dates=[date(2014, 3, i+1) for i in range(10)],
        strings=['edit_this' for i in range(10)],
    )
source = ColumnDataSource(data)

columns = [
        TableColumn(field="dates", title="Date", formatter=DateFormatter()),
        TableColumn(field="strings", title="Downloads", editor=StringEditor()),
    ]

data_table = DataTable(source=source, columns=columns, width=400, height=280,
                       editable=True)

# callback code to detect user edit of table
def update(attrname, old, new):
    data = source.data
    data['strings'] = ['you just edited the table.']*10
    source.data = data

source.on_change('data', update)

curdoc().add_root(widgetbox(data_table))