Qt+Cutelyst学习笔记(二十二)win10+Qt5.15.2 添加一个简单的删除功能(增加重定向)

前言:

本篇继续在前一篇的基础上实现

之前实现一个简单的删除功能,细心的小伙伴会注意到,删除成功后,浏览器中的URL仍在引用删除操作,一旦用户进行了刷新操作,可能会复制提交删除请求,这并不是我们想要的。本次,我们增加重定向,解决这方面的问题

一、修改控制器源码

1..编辑src/books.cpp,以修改delete_obj方法如下

void Books::delete_obj(Context *c)
{
    QVariantHash book = c->stash("object").toHash();
    QString statusMsg;
 
    // Delete the object on the database
    QSqlQuery query = CPreparedSqlQueryThreadForDB("DELETE FROM book WHERE id = :id", "MyDB");
    query.bindValue(":id", book.value("id"));
    if (query.exec()) {
        // Set a status message to be displayed at the top of the view
        statusMsg = "Book deleted.";
    } else {
        // Set an error message to be displayed at the top of the view
        statusMsg = query.lastError().text();
    }
 
    // Redirect the user back to the list page. Note the use
    // of actionFor as earlier in this section (BasicCRUD)
    c->response()->redirect(c->uriFor(CActionFor("list"), ParamsMultiMap{
                                {"status_msg", statusMsg }
                            }));
}

利用uriFor在ParamsMultiMap中包含任意数量的名称/值对的能力,在删除完成后,给浏览器返回一些参数

二、修改包装模板

在root/src/wrapper.html中,将状态消息作为查询参数处理,修改如下

...
<div id="content">
    {% comment %} Status and error messages {% endcomment %}
        <span class="message">{{ status_msg }}{{ c.request.queryParams.status_msg|escape }}</span>
        <span class="error">{{ error_msg }}</span>
    {% comment %} This is where Grantlee will stick all of your template's contents.{% endcomment %}
    {{ content }}
</div><!-- end content -->
...

三、编译并测试

直接编译,生成动态库,并运行服务

在浏览器中访问http://localhost:3000/books/list

运行如下所示

 点击一个删除,会减少一行,显示如下 

这样再刷新,就不会发送重复删除了 

 本测试源码下载

后记:

到目前为止,基本的增、删、查、改功能已实现

下一篇,笔者探究认证相关的内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁白杨树下꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值