Qt+Cutelyst学习笔记(十九)win10+Qt5.15.2 添加数据(链式动作高级用法测试)

Qt+Cutelyst学习笔记(十九)win10+Qt5.15.2 添加数据(链式动作高级用法测试),第1张

 前言:

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

之前实现了链式动作简单用法,本篇实现一个稍微复杂点的链式动作。



一、修改控制器源码

1.编辑src/books.h并修改以下方法:

class Books
{
public:


/**
    * Create a book with the supplied title, rating, and author
    */
//    C_ATTR(url_create, :Local :Args(3))
//    C_ATTR(url_create, :Chained("/") :PathPart("books/url_create") :Args(3))
    C_ATTR(url_create, :Chained("base") :PathPart("url_create") :Args(3))
    void url_create(Context *c, const QString &title, const QString &rating, const QString &authorId);

    /**
     * Can place common logic to start chained dispatch here
     */
    C_ATTR(base, :Chained("/") :PathPart("books") :CaptureArgs(0))
    void base(Context *c);
}

更新一下我们最初的链接 *** 作,先执行下面的base()函数,执行完成后,再执行url_create函数

我们分析下过程:

完整的url请求为http://localhost:3000/books/url_create/TCPIP_Illustrated_Vol-2/5/4

(1)启动链先配置成功"/"

(2)通过CaptureArgs()或AutoCaptureArgs获取参数

(3)根据PathPart()参数匹配的路径"books",应该执行base()函数

(4)执行base()函数

(5)根据启动参数base,链接到链的前一部分

(6)使用“Args()”或AutoArgs来结束链(不要通过“CaptureArgs()”获取参数)

(7)根据PathPart()参数匹配的路径"books",应该执行url_create()函数

(8)执行url_create()函数

2.编辑src/books.cpp,以实现base()方法

void Books::base(Context *c)
{
    // Print a message to the debug log
    qDebug("*** INSIDE BASE METHOD ***");
}

二、编译并测试

直接编译,生成动态库,并运行服务,输出如下

 可以看到“已加载的链接 *** 作”部分将略有更改:

“Path Spec”是相同的,但现在它映射到两个我们预期的私有 *** 作。


base方法由URL的/books部分触发。


然而,处理将继续进行到url_create方法,因为该方法“链接”在base之外,并指定:PathPart(“url_create”)(请注意,我们可以在这里省略“PathPart”,因为它与方法的名称匹配,但我们将包含它以使逻辑尽可能明确)。


在浏览器中访问http://localhost:3000/books/url_create/TCPIP_Illustrated_Vol-2/5/4

运行如下所示

 点击Home,可以看到又多了一行数据

命令下输出如下

从日志可以看到,先执行了base()方法,再执行的 url_create()方法

 本测试源码下载

后记:

笔者第一次没搞明白是怎么回事,但运行了下源码就明白了,也希望小伙伴多动手练习下

下一篇,笔者仍然探究通过表单提交参数相关

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/568045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存