当前位置: 首页 > news >正文

微信编辑器做网站如何用网站模板建站

微信编辑器做网站,如何用网站模板建站,做设备出口网站,政府部门门户网站建设标准前言 每个框架都有需要知道的地方,想不到cppcms这个web框架里面官方有例子的。下面将对官方的几个例子进行整理。 ps: 官方入门教程在这里 http://cppcms.com/wikipp/en/page/cppcms_1x_tut_hello [ps]环境搭建之类的请参考: http://www.52play.net…

前言

每个框架都有需要知道的地方,想不到cppcms这个web框架里面官方有例子的。下面将对官方的几个例子进行整理。

ps: 官方入门教程在这里

http://cppcms.com/wikipp/en/page/cppcms_1x_tut_hello

[ps]环境搭建之类的请参考:

http://www.52play.net/blog/post?id=64

http://www.52play.net/blog/post?id=66

 

hllo world

第一个例子是hello world。

首先,打开的qt creator,然后在main.cpp里面添加如下代码:

#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <iostream>
class hello : public cppcms::application {
public:hello(cppcms::service &srv) :cppcms::application(srv){}virtual void main(std::string url);
};
void hello::main(std::string /*url*/)
{response().out() <<"<html>\n""<body>\n""  <h1>Hello World</h1>\n""</body>\n""</html>\n";
}int main(int argc,char ** argv)
{try {cppcms::service srv(argc,argv);srv.applications_pool().mount(cppcms::applications_factory<hello>());srv.run();}catch(std::exception const &e) {std::cerr << e.what() << std::endl;}
}

2020-02-05_15-01.png

然后,值得注意的是,cppcms启动的时候需要一个设置文件--config.js,代码如下:

{  "service" : {  "api" : "http",  "port" : 8080  },  "http" : {  "script_names" : [ "/hello" ]  }  
}

好了,将这个文件保存到某个地方,譬如我就放到了:

/home/too-white/conf/web.config.js

2020-02-05_15-03.png

然后在启动程序的时候将文件路径传进去,具体这样做:

在打开“项目”标签找到“run”的标签,然后在command line arguments里面添加:

-c  /home/too-white/conf/web.config.js

如下图所示:

 

2020-02-05_15-05.png

 

 

好了,执行查看结果:

2020-02-05_15-06.png

2020-02-05_15-06_1.png

好了,hello world例子讲解完毕。

 

cppcms模板引擎使用方式

这一小节要要用到模板引擎。

原文在:

http://cppcms.com/wikipp/en/page/cppcms_1x_tut_hello_templates

 

 

ps:说实话,cppcms自带的模板引擎不好。。。需要用工具生成c++代码然后再编译成静态库或者动态库,就一个html模板没必要这么繁琐,这个框架直接吐数据即可,其他的用原生的html文件即可。

 

URL的分发和绑定

原文在:

http://cppcms.com/wikipp/en/page/cppcms_1x_tut_url_mapping

 

例子代码:

#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <cppcms/url_dispatcher.h>
#include <cppcms/url_mapper.h>#include <iostream>
#include <stdlib.h>
class hello : public cppcms::application {
public:hello(cppcms::service &srv) :cppcms::application(srv){dispatcher().assign("/number/(\\d+)",&hello::number,this,1);mapper().assign("number","/number/{1}");dispatcher().assign("/smile",&hello::smile,this);mapper().assign("smile","/smile");dispatcher().assign("",&hello::welcome,this);mapper().assign("");mapper().root("/hello");}virtual void number(std::string num);virtual void smile();virtual void welcome();
};
void hello::number(std::string num)
{int no = atoi(num.c_str());response().out() << "The number is " << no << "<br/>\n";response().out() << "<a href='" << url("/") << "'>Go back</a>";
}void hello::smile()
{response().out() << ":-) <br/>\n";response().out() << "<a href='" << url("/") << "'>Go back</a>";
}void hello::welcome()
{response().out() <<"<h1> Welcome To Page with links </h1>\n""<a href='" << url("/number",1)  << "'>1</a><br>\n""<a href='" << url("/number",15) << "'>15</a><br>\n""<a href='" << url("/smile") << "' >:-)</a><br>\n";
}int main(int argc,char ** argv)
{try {cppcms::service srv(argc,argv);srv.applications_pool().mount(cppcms::applications_factory<hello>());srv.run();}catch(std::exception const &e) {std::cerr << e.what() << std::endl;}
}

 

运行以后:

2020-02-05_15-30.png

2020-02-05_15-30_1.png

运行成功。

 

web的层次分层【功能模块化】

原文在这里:

http://cppcms.com/wikipp/en/page/cppcms_1x_tut_hierarchy

 

上一个小节讲的是相当于一个控制器里面有多个action,那么怎么实现多个控制器,每个控制器多个action呢?这就是这一个小节要做的。

 

下面的代码例子与原文有所不同,因为原文的demo不太符合实际。

要实现的控制器:

1、user控制器,里面有:get【获取用户信息】,login【用户登录】,uploadAvatar【用户上传头像】三个接口。要求访问方式为:/user/get/用户的账号id即:userId , /user/login , /user/uploadAvatar

2、首页控制起【index】,getIndexBanner【获取首页广告】,getHotNews【获取热门新闻】

 

设置站点的端口,虚拟路径等

 

首先,设置web.config.js 为【具体设置参考第一小节hello world的例子】,

{  "service" : {  "api" : "http",  "port" : 8080  },  "http" : {  "script_names" : [ "/" ]  }  
}

 

值得注意,我这里先剧透一下,script_names是一个很重要的参数:

2020-02-05_20-06.png

相当于虚拟目录的作用:

2020-02-05_20-08.png

譬如:如果正常你在程序配置的访问路径是 /user/get/20001 ,那么假如 script_names=/ 就可以直接用  /user/get/20001 

 

进行访问,否则 访问路径就是  script_names + /user/get/20001.

 

编写各个代码

 

代码结构如下:

2020-02-05_20-11.png

各个其中IndexController和UserController分别是子模块,webapphandler是总入口模块。

分别有:

indexcontroller.h

#pragma once
#include <string>
#include <regex>
#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <cppcms/url_dispatcher.h>
#include <cppcms/url_mapper.h>#include <iostream>
#include <stdlib.h>class IndexController : public  cppcms::application {public:IndexController (cppcms::service &srv);void index();void getIndexBanner();void getHotNews();
};

 

indexcontroller.cpp

#include "indexcontroller.h"IndexController::IndexController (cppcms::service &srv): cppcms::application(srv)
{dispatcher().assign("",&IndexController::index,this);mapper().assign("");dispatcher().assign("/getIndexBanner",&IndexController::getIndexBanner,this);mapper().assign("getIndexBanner","/getIndexBanner");dispatcher().assign("/getHotNews",&IndexController::getHotNews,this);mapper().assign("getHotNews","/getHotNews");}void IndexController::index(){response().out() << "这是默认地址,无此接口的。";}void IndexController::getIndexBanner(){response().out() << "【接口】获得首页广告";}void IndexController::getHotNews(){response().out() << "【接口】获得热门新闻列表";}

 

usercontroller.h

#pragma once
#include <string>
#include <regex>
#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <cppcms/url_dispatcher.h>
#include <cppcms/url_mapper.h>#include <iostream>
#include <stdlib.h>
class UserController:  public cppcms::application
{
public:UserController(cppcms::service &srv);void get(std::string strUserId);void login();void uploadAvatar();
};

 

usercontroller.cpp

#include "usercontroller.h"UserController::UserController(cppcms::service &srv): cppcms::application(srv)
{dispatcher().assign("/get/(\\d+)",&UserController::get,this,1);mapper().assign("get","/get/{1}");dispatcher().assign("/login",&UserController::login,this);mapper().assign("login","/login");dispatcher().assign("/uploadAvatar",&UserController::uploadAvatar,this);mapper().assign("uploadAvatar","/uploadAvatar");}void UserController::get(std::string strUserId){response().out() << "【接口】获取个人信息:当前您要获取的用户的id是:"<<strUserId;
}void UserController::login(){response().out() << "【接口】登录系统";
}void UserController::uploadAvatar(){response().out() << "【接口】上传头像";
}

 

入口模块:

webapphandler.h

#pragma once
#include <string>
#include <regex>
#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <cppcms/url_dispatcher.h>
#include <cppcms/url_mapper.h>#include <iostream>
#include <stdlib.h>
class WebAppHandler: public cppcms::application
{
public:WebAppHandler(cppcms::service &srv);void intro();void index();
};

webapphandler.cpp

#include "webapphandler.h"
#include "controller/indexcontroller.h"
#include "controller/usercontroller.h"
WebAppHandler::WebAppHandler(cppcms::service &srv): cppcms::application(srv)
{//--这里解释一下吧。//--这段代码的意思是:只要匹配到前面的url【去掉script_names即虚拟目录】是由/index开头的话,那么就//--跳到 我们设定好的new IndexController(srv)这个实例里面进行处理,//--譬如:如果是:/index/getHotNews ,那么就满足这个条件并且,需要处理的【截取到的action】的url部分是://--getHotNewsattach( new IndexController(srv),"index", "/index{1}" // mapping,"/index(/(.*))?", 1);   // dispatchingattach( new UserController(srv),"user","/user{1}","/user(/(.*))?", 1);   // dispatching//--从上面往下,如果不满足前面两条规则,就判断是否满足 /introdispatcher().assign("/intro",&WebAppHandler::intro,this);mapper().assign("intro","/intro");//--默认的页面。dispatcher().assign("",&WebAppHandler::index,this);mapper().assign("");}void WebAppHandler::intro(){response().out()<<"这是AppHandler的描述页面,暂无意义。";
}
void WebAppHandler::index(){response().out()<<"你好这是默认网站首页"<<"<br/>注意,除掉虚拟路径,你可以访问一下几个demo接口地址"<< "<br/>"<<"/user/get/20001  /user/login   /user/uploadAvatar  <br/>  "<< "/index/getHotNews /index/getIndexBanner <br/>"<< "/intro";}

 

好了,程序的入口函数main.cpp是:

#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <cppcms/url_dispatcher.h>
#include <cppcms/url_mapper.h>#include <iostream>
#include <stdlib.h>#include "webapphandler.h"int main(int argc,char ** argv)
{
//--这是demo程序,记得在执行的时候添加上 -c 你的配置文件路径try {cppcms::service app(argc,argv);app.applications_pool().mount(cppcms::applications_factory<WebAppHandler>());app.run();}catch(std::exception const &e) {std::cerr<<e.what()<<std::endl;}}

 

 

那么执行之后会有这些页面显示:

首页:

2020-02-05_20-25.png

 

其他页面:

2020-02-05_20-26.png

2020-02-05_20-26_1.png

2020-02-05_20-26_2.png

结语

本篇文章主要参考了官网,对cppcms这个c++的网站框架进行试用,并且给出部分实际试用例子。

下一篇文章将阐述在实际生产环境下 略显复杂的  c++ 项目如何分模块进行调用,开发。

 

ps: 想要下载项目源代码的请到这里下载:

c++多模块web项目实践方案【cmake+cppcms+boost+fmt】

 

 

 

http://www.lbrq.cn/news/2490517.html

相关文章:

  • 河南省汝州市文明建设门户网站淘宝seo搜索优化工具
  • 手机推广赚钱平台北京seo全网营销
  • 房地产网站怎么做今天国内新闻
  • 商贸公司网站模板长春网站优化服务
  • 关于建设网站的图片淄博信息港聊天室网址
  • 化妆品网站设计思路搜狗搜索旧版本
  • 在哪个网站做外快设计化妆培训
  • 网站 申请绍兴seo外包
  • 临淄网站推广全国疫情最新情况公布
  • 响应式网站是什么网站设计
  • 为什么要给大夫做网站全网营销系统1700元真实吗
  • wordpress+电商版本青岛百度关键词优化
  • 石家庄站客服电话网络营销与管理
  • 网站换空间上怎么办发布平台有哪些
  • 滨江区住房和城乡建设局网站链接提交入口
  • 某网站注册需要邮箱是怎么弄线上销售平台
  • 做网站要先买域名吗东莞推广系统
  • 国外做网站被动收入百度教育小程序
  • 公众号做电影采集网站会被封南京 seo 价格
  • 共享网站的建设与规划如何实现网站的快速排名
  • 小说分销平台seo外包方法
  • 鄂尔多斯建设招投标网站电商营销策划方案范文
  • 在哪里建设网站app推广80元一单
  • 学校网站建设如何服务社会杭州网站关键词排名
  • 嘉兴做网站赚钱么收录排名好的发帖网站
  • 大沥网站设计bt搜索引擎
  • 包装设计公司有哪些呢贵州萝岗seo整站优化
  • 集团网站建设策划方案google图片搜索
  • wordpress蘑菇街免费seo工具
  • 网站建设自己怎么做3步打造seo推广方案
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现
  • Windows10系统使用Cmake4.1.0构建工具+Visual Studio2022编译Opencv4.11教程
  • KNN算法实现图片的识别
  • 数据结构第1问:什么是数据结构?
  • Windows Server系统安装JDK,一直卡在“应用程序正在为首次使用作准备,请稍候”
  • Kafka——Java消费者是如何管理TCP连接的?