使用 WTForms 和 Flask 预填充编辑表单

2024-02-07

我可以使用 WTForms 和 Flask 向数据库添加新条目,并且也可以进行编辑,问题是我需要以编辑表单显示数据库中已存在的信息。

我有以下代码:

编辑帖子表单的类

class editPostForm(Form):
    postTitle = TextField('postTitle', validators.Required()])
    postSubtitle = TextField('postSubtitle', validators.Required()])

编辑帖子模板的路线

@app.route('/editpost/<postId>', methods = ['GET','POST'])
def editpost_page(postId):
try:
    form = editPostForm(form)

    if request.method == "POST" and form.validate():
        postTitle = form.postTitle.data
        postSubtitle = form.postSubtitle.data

        c, conn = connection()

        query = c.execute("SELECT * FROM posts WHERE post_id = (%s)",
                          [noinjection(postId)])

        c.execute("UPDATE posts SET post_title=%s, post_subtitle=%s WHERE post_id = %s",
                     [
                     noinjection(postTitle),
                     noinjection(postSubtitle),
                     noinjection(postId)
                     ])

        conn.commit()

        flash("Post Edited", 'success')

        c.close()
        conn.close()
        gc.collect()

        return redirect(url_for('posts'))

    return render_template("editpost.html", form = form, POST_ID = postId)

except Exception as e:
    return(str(e))

编辑帖子模板 {jinja}

{% extends "header.html" %}

{% block body %}

<body>
    <div class="container-fluid">
        <br />
        <h4>Edit Post</h4>
        <br />
        {% from "_formhelpers.html" import render_field %}
        <form action="/editpost/{{ POST_ID }}" class="form-horizontal" method="post">
            {% from "_formhelpers.html" import render_field %}
            <form action="/editpost/" method="post">
              <div class="form-group">
                <label for="postTitle">Post Title</label>
                <input type="text" class="form-control" id="postTitle" name="postTitle" placeholder="Post Title" value="{{request.form.postTitle}}">
              </div>
              <div class="form-group">
                <label for="postSubtitle">Post Subtitle</label>
                <input type="text" class="form-control" id="postSubtitle" name="postSubtitle" placeholder="Post Subtitle" value="{{request.form.postSubtitle}}">
              </div>
              <button type="submit" class="btn btn-default">Submit</button>
            </form>
            {% if error %}
                <p class="error"><strong>Error: </strong>{{error}}</p>
            {% endif %}
        </form>
        {% if error %}
            <p class="error"><strong>Error: </strong>{{error}}</p>
        {% endif %}

    </div>
</body>

{% endblock %}

使用以下代码,我将在数据库中获取要更新的选定帖子,但 editpost 模板未显示数据库中已有的值,并且所有字段均为空白。

如何在编辑之前预先填充表单?


您可以像这样单独填充每个字段:

form = editPostForm(form)
form.postTitle.data = postTitle_from_database
form.postSubtitle.data = postSubtitle_from_database

或者您可以使用给定对象填充表单字段process method:

process(formdata=None, obj=None, **kwargs)

采用表单、对象数据和关键字参数输入并具有字段 处理它们。

参数:

  • formdata – 用于传递来自最终用户的数据,通常是 request.POST 或等效数据。
  • obj – 如果 formdata 没有字段的数据,表单将尝试从传递的对象中获取它。
  • **kwargs – 如果 formdata 或 obj 都不包含字段值,则表单将分配匹配关键字参数的值 到现场(如果提供)。

由于 BaseForm 在实例化时不获取其数据,因此您必须调用 这是为了向所包含的字段提供表单数据。访问 不建议在调用过程之前获取字段的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WTForms 和 Flask 预填充编辑表单 的相关文章

  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • 将驼峰式字符串转换为 kebab 式字符串的正则表达式

    function hyphenate str var replace str str toLowerCase replace s b g replace console log str return str hyphenate This I
  • ECS Fargate 中的 StoppedReason 被截断

    在 ECS Fargate 中 当任务失败时 有一个 停止原因 字段 它会提供一些有用的日志记录 然而我注意到它在 255 个符号后被截断 下面的屏幕截图 我检查了网络选项卡并跟踪了 http 响应的 JSON 即使在那里它也被截断了 所以
  • iOS 的粒子动画

    我需要粒子动画UIView基于2D的游戏 目前我正在使用一组图像来制作粒子动画 这使得我的应用程序大小增加 有时会导致内存泄漏 有没有办法使用Core Animation制作粒子动画 cocos2d 参见http cocos2d iphon
  • 应用程序的生命周期 - 当应用程序终止并且推送套件有效负载到来时

    应用程序的生命周期是怎样的 当应用程序处于终止状态并且推送套件有效负载到来时 首先 Pushkit 委托方法将起作用 或者 AppDelegate 方法将起作用 有人可以描述在这种情况下调用方法的顺序吗 感谢您的回答 提前致谢 一旦推送套件
  • '无效更新:第 1 部分中的行数无效

    我正在尝试对 tableView 中的聊天重新排序 最近更新的聊天记录应插入IndexPath row 0 section 1 我的理解是 为了删除一行 它必须是可见的 如果该行不可见 则当更新数据源时 我只需tableView inser
  • 如何将 TeamCity 设置为在构建失败时不生成构建工件?

    如何设置 TeamCity 以便在由于单元测试失败而导致构建失败时它不会发布构建工件 我很确定它在 6 0 版本之前是这样工作的 但自从升级到 6 0 后 即使测试失败 它也总是会产生工件 我检查了 如果至少一项测试失败 则构建失败 我们的
  • Powershell:如何将 -whatif 传播到另一个模块中的 cmdlet

    我一直在尝试使用 ShouldProcess 方法编写支持 whatif 的安全代码 以便我的用户在真正运行 cmdlet 之前就知道它应该做什么 然而我遇到了一些困难 如果我使用 whatif 作为参数调用脚本 pscmdlet Shou
  • 基于 Numpy 时间的向量运算,其中前面元素的状态很重要 - for 循环合适吗?

    在状态很重要的情况下执行基于时间的计算时 numpy 数组提供什么功能 换句话说 序列中较早或较晚发生的事情很重要 考虑以下基于时间的向量 TIME np array 0 10 20 30 40 50 60 70 80 90 FLOW np
  • 为任意音频文件生成缩略图

    我想在最大尺寸为 180 180 像素的图像中表示音频文件 我想生成这个图像 以便它以某种方式给出音频文件的表示 将其想象为 SoundCloud 的波形 幅度图 我想知道你们中是否有人有这方面的东西 我一直在搜索一些 主要是 音频可视化
  • F#:可为 Null 支持

    在 F 中使用 Nullable 的正确方法是什么 目前我正在使用这个 但它看起来非常混乱 let test left Nullable
  • apache htaccess 使用别名重写

    我们正在更改我们的域名 这旨在适用于独立应用程序 在 Apache 虚拟主机文件中 DocumentRoot 是 var www website html 而不是此块中的 var www example html Alias apps de
  • 为什么我可以在没有参数的情况下初始化 UIView,但它的文档没有空的初始化程序?

    let view UIView 为什么当唯一记录的时候编译没有错误UIView初始化器是init frame CGRect 具体来说 我正在尝试编写一个继承自的新类UIView 但是这段代码会抛出一个错误 class SquadHorizo
  • 谷歌反向地理编码 - 如何捕捉到最近的完整邮政编码

    我正在使用 Google 的反向地理编码功能和地图 api v3 来检索纬度经度的邮政地址 当在地图上拖动标记时 这仅是英国应用程序 系统的一部分需要完整或接近完整的邮政编码才能正确处理 然而 反向地理编码器通常只返回邮政编码的一部分 例如
  • 如何使用 NAnt 修改源代码?

    我想在构建解决方案之前使用 NAnt 修改 h 文件中的字符串 h 文件中有一个宏 define SERVER ADDRESS www customserver net 我想在部署软件之前修改该字符串 以便通过在命令行中传递地址来为自定义地
  • 删除除 2 列外所有列均为 NA 的行[重复]

    这个问题在这里已经有答案了 我有一个data table 我想删除那些除某些 2 列之外的所有列均为 NA 的行 例如 我有一个 data table 像 gt ww2 Sepal Length Sepal Width Petal Leng
  • 合并多个 javascript 文件

    我读过 将多个 javascript 文件合并到一个文件中可以提高性能 这是真的吗 如果是这样 是否有一种简单且无错误的方法来合并它们 或者也许有一个自动执行此操作的在线工具 非常感谢 See 多个 javascript css 文件 最佳
  • Windows 上的 Qt5 部署

    我一直在研究如何将我的桌面应用程序从 Qt5 Creator 部署到一组 dll 和一个 exe 记录的过程似乎极其复杂 http qt project org doc qt 5 0 qtdoc deployment windows htm
  • 在 i18next 中转义特殊字符

    所以我有这个变量 它将包含类似 的内容 然后我有这个 var vocab mm responses positive lngs LANG target User tag amount r multiplier icon iconFile 这
  • 我如何设置 jQuery 日期选择器的年份范围:1900 到当前年份,或 1900 到 9999

    大家好 我用过Jquery Date picker这对我来说已经足够好了 但我有一个小问题 即我想设置Start year from 1900 and End year to Current Year or 9999 在脚本中我找到了这个y
  • 使用 WTForms 和 Flask 预填充编辑表单

    我可以使用 WTForms 和 Flask 向数据库添加新条目 并且也可以进行编辑 问题是我需要以编辑表单显示数据库中已存在的信息 我有以下代码 编辑帖子表单的类 class editPostForm Form postTitle Text