如何在UI状态更改时更新wtf-form状态?

时间:2017-08-09 00:47:52

标签: html flask flask-wtforms

到目前为止,我的流程是使用WTF表单并根据用户活动更新其状态:

template.html 中,我有:

<form action="{{ url_for('page') }}" method="POST">
    <select id="sel_id" name="name1" onchange="this.form.submit();">
    ...
    </select>
</form>

          ...      在 views.py 中我得到了:

@app.route('/')
@app.route('/process', methods=['GET', 'POST'])
def process():
    form = NoNameForm()
    if request.method == 'POST':
        if 'name1' in request.form:                        
            form.colors = int(request.form['name1'])

在这种情况下,这是使用WTF表单和更新form.colors等变量的正确方法吗? 我想知道我是否可以直接在“form.colors”js代码中更新onchange

1 个答案:

答案 0 :(得分:3)

我不认为在这种情况下有一个“正确”的方法 - 正确的方式取决于你想要达到的目的。

A。如果 - 例如 - 你不想因为某种原因搞乱JavaScript,你不介意重新加载页面,那么你可以像在代码示例中那样做。

B。另一方面,如果您只是想重新加载页面来更改表单颜色,那么我会说这是一个开销,简单的JS脚本会更优雅,用户友好情况下。

编辑回答评论问题:

你能解释一下'重装页面'吗?

当您的浏览器使用标准HTTP方法(如GET和POST)与服务器通信以交换数据时,它必须在获取响应(这是对您的请求的答案)后重新加载页面服务器。
另一方面,如果您的页面使用AJAX(异步JavaScript和XML),那么事实并非如此。引用Wikipedia主题:

  

使用Ajax,Web应用程序可以向其发送数据和从中检索数据   服务器异步(在后台)不干扰   显示现有页面的行为。通过解耦数据   从表示层交换层,Ajax允许Web   页面,以及扩展Web应用程序,以更改内容   动态而无需重新加载整个页面。

如果我决定使用JS并且我没有重新加载页面,我会在选项'A'中松开什么?

无论哪种方式都有其优点和缺点,由您决定哪种方式可以使用。

引用this文章:

  

Ajax的主要优势:
  它使事情变得简短而快速   2.摆脱重装页面   3.对于实时应用非常有用。
  4.减少服务器负载并节省带宽。

     

Ajax的主要缺点:
  1.书签问题。
  2.对SEO很糟糕。
  3.屏幕阅读器无法访问ajax   4.只有现代浏览器支持它,如果用户端没有启用javascript,你的网站看起来会很难看。

使用JS意味着它不会重新加载页面吗?
如果您使用Ajax与服务器和JS交换数据以将结果放在您的网站上,那么是 - 不需要重新加载。

回到您的代码示例 - 如果您只是出于演示原因而想要更改表单颜色,并且对于您的应用程序而言,表单具有哪种颜色并不重要,那么就没有理由在服务器端执行此操作。