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

sra*_*mij 5 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>
Run Code Online (Sandbox Code Playgroud)

......在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'])
Run Code Online (Sandbox Code Playgroud)

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

kch*_*ski 3

我认为在这种情况下没有一种“正确”的方法 - 正确的方法取决于你想要实现什么。

\n\n

答:例如,如果您出于某种原因不想弄乱 JavaScript 并且您不介意重新加载页面,那么您可以按照代码示例中的方式进行操作。

\n\n

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

\n\n

编辑以回答评论问题:

\n\n

您能解释一下“重新加载页面”吗?

\n\n

当您的浏览器使用标准 HTTP 方法(如 GET 和 POST)与服务器通信以交换数据时,它必须在从服务器获取响应(即对您的请求的答复)后重新加载页面。
\n另一方面,如果您的页面使用 AJAX(异步 JavaScript 和 XML),则情况并非如此。引用维基百科关于该主题的内容:

\n\n
\n

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

\n
\n\n

如果我决定使用 JS 并且不重新加载页面,我会在选项“A”中失去什么?

\n\n

任何一种方法都有其优点和缺点,由您决定选择哪一种方法。

\n\n

引用这篇文章:

\n\n
\n

Ajax 的主要优点:
\n 1. 它使事情变得简短而快速。
\n 2. 摆脱重新加载页面。
\n 3. 对于实时应用程序非常有用。
\n 4.减少服务器负载,节省带宽。

\n\n

Ajax 的主要缺点:
\n 1. 书签问题。
\n 2. 对 SEO 非常不利。
\n 3. 屏幕阅读器无法\xe2\x80\x99访问ajax。
\n 4. 只有现代浏览器支持它,如果用户端没有启用javascript,您的网站将看起来很难看。

\n
\n\n

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

\n\n

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

\n