c++高性能web框架drogon入门教程四,orm使用,csp使用

这篇具有很好参考价值的文章主要介绍了c++高性能web框架drogon入门教程四,orm使用,csp使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2020年11月26日13:57:48

c++高性能web框架drogon入门教程一 linux环境搭建和demo运行

c++高性能web框架drogon入门教程二 windows10下安装drogon,配合vscoede搭建开发环境

c++高性能web框架drogon入门教程三 控制器和数据库客户端使用

c++高性能web框架drogon入门教程四 orm使用,csp使用

c++高性能web框架drogon入门教程五 实例小项目,web和api实例代码

首先这个 drogon的orm和一般框架的orm是不一样的,不要用你使用其他框架的orm来使用

orm是同步接口,dbclient基本都是异步接口,性能更好,建议

1,配置model.json

上篇博客已经写好了,翻一下

2,生成对应模型

drogon_ctl create model models

直接yes覆盖

3,一个实例代码

#include "TestCtrl.h"
#include "../models/Admin.h"
#include <exception> 

using namespace web;
using namespace drogon_model::v2;
using namespace drogon::orm;


void TestCtrl::name(const HttpRequestPtr &req,
             std::function<void (const HttpResponsePtr &)> &&callback) const
{
    try{
        auto clientPtr = drogon::app().getDbClient();
        Mapper<Admin> mp(clientPtr);
        // std::vector<Admin> uu = mp.orderBy(Admin::Cols::_id).limit(25).offset(0).findAll();

        auto iii = mp.count();
        std::cout << iii << " rows 111111111111111!" << std::endl;

        auto uu = mp.orderBy(Admin::Cols::_id).limit(5).offset(5).findAll();
        std::cout << uu.size() << " rows 2222222222222222!" << std::endl;

    }catch (const DrogonDbException &e){
        std::cout << "error:" << e.base().what() << std::endl;
    }
    Json::Value ret;
    ret["result"]="33";
    ret["user_name"]="Jack";
    ret["gender"]=1;
    auto resp=HttpResponse::newHttpJsonResponse(ret);
    callback(resp);
}

很奇怪有一个问题,admin表背后有30条记录,但是

mp.orderBy(Admin::Cols::_id).limit(5).offset(5).findAll();就崩溃
mp.orderBy(Admin::Cols::_id).limit(1).offset(1).findAll();就OK

看是windows下的bug吧,而且orm生成的语句和一般我们认为的生产的SQL语句不一样

比如我们一般认为.limit(5).offset(5)

注意:应该生成的是limit 5,5 但是实际生成的limit 5 offset 5

目前我使用的版本有个小bug就是如果你使用orm,你的datetime类型的数据,如果值是"0000-00-00 00:00:00"的通过Mapper包装的Admin模型就会导致程序崩溃,异常也无法捕获

所以建议在数据里不要存在datetime类型的数据为"0000-00-00 00:00:00"的数据,不然就会崩溃,此问题已经反馈给框架作者

中文乱码问题,数据库编码设置在配置json里,两个json都要改

"client_encoding": "utf8",

全局sql打印,打印一些debug信息

"log_level": "TRACE"
error LNK2005: 已经在 TestCtrl.obj 中定义

正在创建库 D:/cpp/web/build/Debug/web.lib 和对象 D:/cpp/web/build/Debug/web.exp
[build] LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library [D:\cpp\web\build\web.vcxproj]
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符

4,csp使用,注意这个和我们一般所谓的模板引擎不是同一个概念,也类似,这里通过c++语法吧html,拼接出来

drogon_ctl create view Index.csp
create view:Index.csp
create HttpView Class file by Index.csp
can't open file Index.csp

你需要先去view手动建立一个空的 Index.csp,注意保存为utf-8

然后执行项目根目录

drogon_ctl create view Index.csp
<%inc
#include "../models/News.h"
#include <exception>
#include <trantor/utils/Date.h>

using namespace drogon_model::v2;
using namespace drogon::orm;
%>
<!DOCTYPE html>
<html lang="zh-CN">
<%c++
    auto t1=@@.get<std::vector<News>>("news1");
    
    auto t2=@@.get<Result>("news2");
    for (auto row : t2) 
    {
        std::cout <<  row["id"].as<std::string>() << std::endl;
        std::cout <<  row["title"].as<std::string>() << std::endl;
        std::cout <<  row["create_time"].as<std::string>() << std::endl;
    }
%>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
 
    <title>[[ title ]]</title>

    <!-- Bootstrap -->
    <link href="./static/css/bootstrap.min.css" rel="stylesheet">
    
  </head>
  <body>
 <!-- Fixed navbar -->
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Bootstrap 主题</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="/">首页</a></li>
            <li><a href="#about">关于我们</a></li>
            <li><a href="#contact">联系我们</a></li>
            <li class="下拉菜单">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li role="separator" class="divider"></li>
                <li class="dropdown-header">Nav header</li>
                <li><a href="#">Separated link</a></li>
                <li><a href="#">One more separated link</a></li>
              </ul>
            </li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <div class="container theme-showcase" role="main">

      <!-- Main jumbotron for a primary marketing message or call to action -->
      <div class="jumbotron">
        <h1>主题示例</h1>
        <p>This is a template showcasing the optional theme stylesheet included in Bootstrap. Use it as a starting point to create something more unique by building on or modifying it.</p>
      </div>


      <div class="page-header">
        <h1>新闻列表</h1>
      </div>
      <div class="row">
        <div class="col-md-6">
          <table class="table">
            <thead>
              <tr>
                <th>ID</th>
                <th>标题</th>
                <th>作者ID</th>
                <th>时间</th>
              </tr>
            </thead>
            <tbody>
        
<%c++ for(auto iter:t1){%>
<tr>
                 <td>{%*iter.getId()%}</td>
                 <td><a href="/news_detail?news_id={%*iter.getId()%}" target="__blank">{%*iter.getTitle()%}</a></td>
                 <td>{%*iter.getAdminId()%}</td>
                <%c++ trantor::Date now = *iter.getCreateTime();%>
                  <td>{%now.toDbStringLocal()%}</td>
                </tr>
<%c++}%>
            </tbody>
          </table>
        </div>

 <div class="row">
      
        <div class="col-md-6">
          <table class="table table-condensed">
            <thead>
              <tr>
                <th>ID</th>
                <th>标题</th>
                <th>作者ID</th>
                <th>时间</th>
              </tr>
            </thead>
            <tbody>
              <%c++ for(auto row:t2){%>
            <tr>
              <td>{%row["id"].as<std::string>()%}</td>
              <td>{%row["title"].as<std::string>()%}</td>
              <td>{%row["admin_id"].as<std::string>()%}</td>
              <td>{%row["create_time"].as<std::string>()%}</td>
             </tr>
            <%c++}%>
            </tbody>
          </table>
        </div>
      </div>

    </div> <!-- /container -->

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->

    <script src="./static/js/jquery.min.js"></script>
    <script src="./static/js/bootstrap.min.js"></script>
  </body>
</html>

 注意view重名问题,因为编译的之后模板都是放到build里面,避免重名文章来源地址https://www.toymoban.com/news/detail-404540.html

到了这里,关于c++高性能web框架drogon入门教程四,orm使用,csp使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始实现一个C++高性能服务器框架----Hook模块

    此项目是根据sylar框架实现,是从零开始重写sylar,也是对sylar丰富与完善 项目地址:https://gitee.com/lzhiqiang1999/server-framework 项目介绍 :实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括

    2023年04月09日
    浏览(82)
  • 从零开始实现一个C++高性能服务器框架----环境变量模块

    此项目是根据sylar框架实现,是从零开始重写sylar,也是对sylar丰富与完善 项目地址:https://gitee.com/lzhiqiang1999/server-framework 项目介绍 :实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括

    2024年02月02日
    浏览(36)
  • 从零开始实现一个C++高性能服务器框架----Socket模块

    此项目是根据sylar框架实现,是从零开始重写sylar,也是对sylar丰富与完善 项目地址:https://gitee.com/lzhiqiang1999/server-framework 项目介绍 :实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括

    2023年04月08日
    浏览(37)
  • Ktor vs Spring Boot:哪个框架能帮助你构建更高性能的 Web 应用?

    文章首发地址 Ktor 和 Spring Boot 是两个在 Kotlin Web 开发中常用的框架,它们有一些共同点,也有一些区别。 都支持 Kotlin:Ktor 和 Spring Boot 都能够完全支持 Kotlin 语言,这使得开发者可以使用 Kotlin 的特性和优势来构建 Web 应用程序。 都提供了简化开发的功能:Ktor 和 Spring Boot

    2024年04月10日
    浏览(42)
  • Nginx 入门指南:从入门到放弃(不是!)从零开始掌握高性能 Web 服务器

    Nginx 可以构建高性能、可靠的 Web 服务器。本文将带你了解 Nginx 的基本概念、安装方法以及常见配置,让你快速上手并搭建自己的 Web 服务器。 随着互联网的发展,构建稳定、高性能的 Web 服务器成为了许多开发者的重要需求。而在众多的服务器软件中, Nginx 以其出色的性能

    2024年04月15日
    浏览(50)
  • 【Linux高性能服务器编程】——高性能服务器框架

      hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之高性能服务器框架介绍,在这篇文章中, 你将会学习到高效的创建自己的高性能服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了解网络编程技术!!! 希望这篇

    2024年04月25日
    浏览(39)
  • 高性能RPC框架解密

    专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏: Python 专栏: Redis 专栏: TensorFlow 专栏: Logback 专栏: 量子计算: 量子计算 | 解密著名量子算法Shor算法和Grover算法 AI机器学习实战: AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析 AI机器学习 | 基于lib

    2024年01月17日
    浏览(49)
  • GRPC的学习(高性能远程过程调用框架)

    在一次和公司的人工智能部门的对接中,涉及到了grpc接口,实现的是实时语音流转文字。把自己对grpc的理解归纳出博客,并且分享出来。我会围绕几个点进行展开,gprc和rpc的差别,以及分析下优缺点,最后通过一个实例。 技术一GRPC和RPC的区别 通信协议:RPC使用的通信协议

    2024年02月13日
    浏览(31)
  • tomcat---企业高性能web服务器

    目录 1.tomcat的简介 2.tomcat安装 3.tomcat中重要的目录及路径  编写一个tomcat的启动脚本 4.tomcat的web站点的部署 如果需要修改首页文件: 5.tomcat的虚拟主机部署 tomcat是一款开源免费的web应用服务器,在中小型企业及并发访问不是很高的情况下使用,是开发和调试jsp首选。但是t

    2024年02月13日
    浏览(37)
  • C++高性能优化编程之如何测量性能(一)

    C++高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C++并发线程编程 不好的编程习惯,不重视程序性能测量分析让代码跑的更快,会导致 浪费大量的CPU周期、程序响应时间慢以及卡顿,用户满意度下降,进而浪费大量的时间返工去重构本应该一开始就

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包