首页 > 解决方案 > 不要在 html 中按下按钮获得价值

问题描述

我有一个按钮,点击它时只需要执行一个 javascript 函数。javascript 函数返回一个我打算在烧瓶后端捕获的字符串。目前,javascript 函数在 onclick 上运行。

编码:

<form id='details'method="post">
     <input class="myButton" id="mybutton" type="submit" value="Save" onclick="getdata()">
     </input>
</form>

烧瓶代码:

app.add_url_rule('/entry1', endpoint='entry1', view_func=new_data, methods=['GET', 'POST'] )

def new_data():
    if request.method == 'POST':
        details = request.form['details']
        print(details)

在烧瓶中,当我给出 request.forms['details'] 时,我什么也没得到。我希望从 getdata 中获取返回的数据。我很确定,html方面存在一些问题。请指教。

有很多关于相同的评论,但它没有解决......只是想知道是否有任何其他方式来处理它,我只需要在按钮单击时收集的文本传输到 python 后端,看起来很简单,但就是不能完成这个:(谢谢

标签: javascripthtmlpython-3.xflask

解决方案



#EDIT 2在此处检查此答案。

我在这里报告大部分内容作为参考:

  • [ request.args][2]:URL 查询字符串中的键/值对
  • [ request.form][3]:正文中的键/值对,来自 HTML 发布表单或非 JSON 编码的 JavaScript 请求
  • [ request.files][4]:正文中的文件,Flask 与form. 必须使用 HTML 表单enctype=multipart/form-data,否则将无法上传文件。
  • [ request.values][5]:组合argsand formargs如果键重叠则优先
  • [ request.json][6]:解析的 JSON 数据。请求必须具有application/json内容类型,或使用 [ request.get_json(force=True)][7] 忽略内容类型。

所有这些都是 [ MultiDict][8] 个实例(除了json)。您可以使用以下方式访问值:

  • request.form['name']:如果您知道密钥存在,请使用索引
  • request.form.get('name')get如果密钥可能不存在,则使用
  • request.form.getlist('name')getlist如果密钥被多次发送并且您想要一个值列表,请使用。get只返回第一个值。

首先,如果您还添加烧瓶代码会很有帮助。话虽如此,将其添加到输入标签中:

<form id='details'method="post">
     <input class="myButton" name="details" id="mybutton" type="submit" value="Save" 
     onclick="getdata()">
 </input>
</form>

所以基本上你有一个 'name=""' 字段。

然后在python文件中,使用这个:

request.form['details']

如果您将值存储在变量中会更好(显然这取决于您,只是一个建议)

request_detail = request.form['details']

同样在表单标签中,您可能想要添加一个“action=”“”字段。这取决于烧瓶中如何路由装饰器。

例如,如果你有这个:

@app.route('/details)
def details():
    pass

那么你的表格应该有这个:

<form id='details'method="post" action="/details">

或者

<form id='details'method="post" action="details">

编辑

尝试使用普通的路由装饰器来查看它是否修复:

@app.route('/entry1', methods=['GET', 'POST'])
def new_data():
    if request.method == 'POST':
        details = request.form['details']
        print(details)
    return render_template('filename.html')

如果您仍想使用 add_url_rule 试试这个:

app.add_url_rule('/', 'entry1', view_func=new_data, methods=['GET', 'POST'] )


推荐阅读