Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >10分钟完成一个在线RSS阅读器?腾讯云Serverless Web Function使用体验

10分钟完成一个在线RSS阅读器?腾讯云Serverless Web Function使用体验

原创
作者头像
蛮三刀酱
修改于 2021-08-02 02:27:39
修改于 2021-08-02 02:27:39
1.3K0
举报

作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤。

编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间。

作为一个不精通代码的业务玩家,当你想搞个网站玩玩时,经常会被淘宝贵得离谱的报价吓跑。

这两年Serverless的概念被炒得火热,顾名思义,“无服务”。今天的这篇文章,我想站在一个开发者的角度,带大家简单的体验下使用腾讯云Serverless来开发网站的整体流程。看看在Serverless的概念下,开发网站是不是变得更加简单了。

本文的主要内容:

  • Serverless概念解释
  • 3分钟部署一个网站
  • 10分钟开发一个在线RSS阅读小站
  • 腾讯Serverless Web Function的优缺点分析

我是蛮三刀,关注我的个人原创技术公众号:后端技术漫谈

首先放一个我部署好的RSS在线阅读器页面:

只要在url传入需要解析的RSS订阅地址,比如xxxx/rss?rssurl=https://blog.csdn.net/qqxx6661/rss/list ,就可以解析出该RSS,并渲染成你想要的博客样式。

整个实现代码除了html模板,只需要4行代码。

Serverless概念

Serverless是一个怎样的运行原理呢?简单的解释下:

腾讯云云函数是腾讯云提供的 Serverless 执行环境。您只需编写简单的、目的单一的云函数即可将它与您的腾讯云基础设施及其他云服务产生的事件关联。

当然了,Serverless不是表示没有服务器,而表示当您在使用 Serverless 时,您无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务资源。Serverless 拥有近乎无限的扩容能力,空闲时,不运行任何资源。代码运行无状态,可以轻易实现快速迭代、极速部署。

它的大致执行流程如下图:

所以,Serverless其实本质上是云服务上帮你整合了云资源,你只需要编写最核心的代码,比如一个请求过来如何处理和返回对应的数据。其他的服务器部署相关的事情,都交给云服务商。这样带来的最核心的好处是节省了大量资源,只有你的网站有人访问时,才会计算资源消耗的价格,大幅度降低了成本。

可能你只是想搭建一个博客,以前可能需要买一年的服务器,起码一年开销几百元。在Serverless下,如果你的博客访问量并不是很高,可能一年只要花费十几块钱。

3分钟部署一个网站

我们打开Serverless创建函数服务页面:

https://console.cloud.tencent.com/scf/list-create?rid=16&ns=default&keyword=WebFunc

选择Python3 Web函数模板:

接着可以设置一些基本信息,这里我啥也没修改,直接点击完成。

大概等待30秒,一个Serverless服务就创建完成了。

接下来,我们就被跳转到了代码编辑页面。由于我们在上面的选项里选了Python3 Web开发,所以代码默认有了一个最基本的Flask框架模板。(Flask是什么?是Python的一个Web开发框架,就像Java下面的SpringBoot一样,也能很轻松地开发一个Web服务。官方文档:https://flask.palletsprojects.com/en/2.0.x/

模板代码已经有了路径(“/”)最基本的返回值,我们把他改几个字,然后点击左下角部署按钮。花费了十几秒部署完成后,点击测试,我们就能看到返回的Body了,如下图。这时候你访问页面,也返回了同样的结果。

一个最最基础的Web服务器就OK了,不需要买域名和HTTPS证书,不需要SSH登录服务器,不需要手动编译代码,🐂🍺。

10分钟开发一个在线RSS阅读小站

上面是牛刀小试,接下来稍微整一个复杂一点点的例子。

我一直觉得RSS阅读是一个虽然过时,但是其精神一直在传承的阅读方式。比如微信的订阅号,可以说其本质也是一种RSS阅读,通过关注订阅,并获得更新文章的推送,来定制化你的阅读内容。

所以我想做一个RSS解析器,通过传入RSS的网址(很多网站还保留有这个网址,比如CSDN,比如阮一峰的博客等),能够渲染出该RSS链接里所有的文章,并展示在网页上。后面,还可以深度的修改页面的展示,做出一个微信订阅号网页版,也不是不可能,哈哈哈。

OK,花里胡哨的就不扯了,先开始实现一个最简单的事情,把RSS链接渲染出来。

我们使用官方的Flask模板,这个模板的Flask环境相对更加完整,方便开发。

我们首先需要一个RSS解析的框架,在Python中,有一个feedparser的框架,能够解析RSS url。

使用pip3 install feedparser安装feedparser:

接着我们在app.py加入代码:

代码语言:txt
AI代码解释
复制
import feedparser

@app.route('/rss')
def rss():
    feed = feedparser.parse(request.args.get('rssurl'))
    return render_template('rss.html', entries=feed.entries)

在这里,我进行了一波本地调试,看一下feed这个参数,拿到了什么:

可以看到,解析后的rss链接,被feedparser框架解析为了一个数组,每个entry是一个文章的标题,作者,链接等。

根据上面的参数名,我们再加入一个rss/html,放在templates文件夹中,里面写好了我稍微美化过的html页面,并且将每篇文章循环插入html中,这里用到了flask自带的渲染模板jinja2:

代码语言:txt
AI代码解释
复制
<html>
<head>
    <title>RSS阅读博客</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/js/bootstrap.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js"></script>
<div class="container-fluid">
	<div class="row-fluid">
		<div class="span12">

            <nav class="navbar navbar-expand-lg navbar-light bg-light">
              <div class="container-fluid">
                <a class="navbar-brand" href="#">RSS解析器</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                  <span class="navbar-toggler-icon"></span>
                </button>
                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                  <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                    <li class="nav-item">
                      <a class="nav-link active" aria-current="page" href="#">首页</a>
                    </li>
                  </ul>
                  <form class="d-flex">
                    <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
                    <button class="btn btn-outline-success" type="submit">Search</button>
                  </form>
                </div>
              </div>
            </nav>

            <div class="accordion" id="accordionExample">
                {% for entry in entries %}
                <div class="accordion-item">
                    <h2 class="accordion-header" id="heading{{ loop.index }}">
                      <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ loop.index }}" aria-expanded="false" aria-controls="collapse{{ loop.index }}">
                        {{ entry.title }} | {{ entry.published }}
                      </button>
                    </h2>
                    <div id="collapse{{ loop.index }}" class="accordion-collapse collapse" aria-labelledby="heading{{ loop.index }}" data-bs-parent="#accordionExample">
                      <div class="accordion-body">
                        {{ entry.summary | safe }}
                      </div>
                    </div>
                </div>
                {% endfor %}
            </div>


        </div>
	</div>
</div>
</body>
</html>

两个文件修改完,直接点击部署然后访问腾讯云给我们分配的域名:

https://service-ehshqmzv-1252138314.cd.apigw.tencentcs.com/release/rss?url=https://blog.csdn.net/qqxx6661/rss/list

image-20210801114213652
image-20210801114213652

可以看到,完美解析出了我CSDN博客的RSS流,并且可以一个个打开。动图见文章最上方。

Web Function的优缺点分析

可以看出来,Serverless开发一个网站和传统网站开发区别非常大,它撇去了传统开发中那些冗杂但是又不经常会去修改的配置和流程,让开发者专注于业务逻辑的开发。但是这种开发方式真的完美吗?我思考了一下它的优势和不足。

最明显的优势便是它简化了开发的步骤,省去了很多部署的无聊工作量。但是,它的简化是有代价的,简化是会牺牲很大一部分灵活性和可定制性的。简化能够好用的前提是,云服务商把这些事情做到了,并且做好了。如果你的网站需要大量复杂的逻辑,并且需要优化网关的配置,那么很多事情在Serverless下,至少在目前提供的Serverless下,还是做不到的。

上面说到的弊端,其实会带来一个很大的问题,就是沉没成本,当你花了很多时间在Serverless上,却发现有一些小的要求或者定制化,没法实现,这时你是去翻文档,提工单,还是选择老老实实买个虚机,自己手动重新部署呢。

当然,上述观点是一个开发者的视角来看的。

作为普通消费者,可能很多时候只需要部署一个静态网站,用来放一个博客,或者说推广下自己的公司和产品。那么Serverlss大概率是符合要求的。

除了上面的主要矛盾外,还有一点是我想提出的,就是目前在线代码编辑页面的调试功能有点太弱了

在最开始的Python3 Web模板中,在线的依赖库貌似缺失了新版本的feedparser和flask,导致我在本地调试能够运行的代码放到Serverless上各种不成功,但是错误信息却很难找。导致我不得不在VS Code的终端里,一个手动开flask服务,一个去curl请求,才能看到报错信息。

当然,这个可能是我自己走得歪路,但是在页面上,很难一眼看出来Debug窗口在哪里。

在用户体验上,还有很多事情可以做。

总结

不知不觉又是一篇2500字的文章,一个完整的周末又没有了。

Serverless概念提出了好几年了,其产品形态总感觉还在摸索阶段,它的用户群体到底是开发者,还是普通消费者,其实还是会被产品形态所影响。

不管怎么说,Serverless在成本的节省上是有目共睹的,我也希望在我的云服务器过期后,能够把自己的博客和其他服务,部署在Serverless上,能够节省一大笔开销。光是成本这一点,就值得我不断关注着Serverless。

如果文章对你有帮助,请各位老板转发支持一下,你的支持和鼓励对我非常重要~

关注我

我是一名奋斗在互联网一线的后端开发工程师。

平时主要关注后端开发,数据安全,欢迎交流。

个人公众号:后端技术漫谈

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3分钟搭建一个网站?腾讯云Serverless开发体验
编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间。
Rude3Knife的公众号
2021/08/06
1.1K1
3分钟搭建一个网站?腾讯云Serverless开发体验
3分钟搭建一个网站?腾讯云Serverless开发体验
编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间。
蛮三刀酱
2022/01/05
7260
3分钟搭建一个网站?腾讯云Serverless开发体验
python web开发 网络编程 HTTP协议、Web服务器、WSGI接口
注:由于 HTML 里面写了很多下载的 css 文件地址,路径总是报错,最后还是 建议引用 CDN 写法,相关库地址查询https://www.bootcdn.cn/
Michael阿明
2022/01/07
1.2K0
python web开发 网络编程 HTTP协议、Web服务器、WSGI接口
PHP实现Wget在线仿站工具
项目的核心是使用PHP处理用户请求,通过SSH连接服务器执行爬取命令,并将结果发送到用户邮箱。
C4rpeDime
2024/10/30
4810
从头搭建一个在线聊天室(二)
我这里使用 redis 来作为后端数据存储工具。大家如果有自己的 redis 服务器当然是最好了,如果没有的话,推荐下在线的 redis 免费应用 redislabs,大家可以自行体验下,https://redislabs.com/
周萝卜
2019/07/17
1.3K0
从头搭建一个在线聊天室(二)
构建可读性更高的 ASP.NET Core 路由
  不知你在平时上网时有没有注意到,绝大多数网站的 URL 地址都是小写的英文字母,而我们使用 .NET/.NET Core MVC 开发的项目,因为在 C# 中类和方法名采用的是 Pascal 命名规范,根据 .NET 框架默认的路由规则,项目的 URL 地址会呈现出大小写混合的情况。对于强迫症来说,这种情况绝对不能忍,当然,由于整个项目的 URL 地址大小写混合显示,也无法更清晰的向用户、浏览器表达出当前页面的功能。那么,这篇文章就来介绍下,如何调整我们的 ASP.NET Core 项目的路由规则,从而使我们项目的 URL 地址可读性更高。
程序员宇说
2019/07/31
6910
Python进阶31-Django 分页器
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.6K0
Python进阶31-Django 分页器
【Java 进阶篇】手把手教你创建 Bootstrap 旅游网站
随着互联网的普及,旅游行业在全球范围内迅速发展。人们通过网络规划、预订和分享他们的旅行经历。因此,拥有一个令人印象深刻的旅游网站对于吸引游客和提供有用信息至关重要。在本篇博客中,我们将手把手教您如何创建一个令人兴奋的旅游网站,使用流行的前端框架 Bootstrap 来简化整个过程。
繁依Fanyi
2023/10/23
4620
【Java 进阶篇】手把手教你创建 Bootstrap 旅游网站
BootStrap应用开发学习入门1
什么是字体图标? 答:字体图标是在 Web 项目中使用的图标字体,可以通过基于项目的 Bootstrap 来免费使用这些图标。
全栈工程师修炼指南
2020/10/23
45.7K0
BootStrap应用开发学习入门1
Web-第五天 BootStrap学习
将使用Bootstrap重写首页,整个案例中将使用到Bootstrap各种模块,为了方便编程,将采用拆分的原则,各个模块单独编写,最后组合。
Java帮帮
2018/07/27
5.3K0
Web-第五天 BootStrap学习
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
前言 童鞋们,大家好 我是专注.NET开发者社区建设的实践者Rector。 首先,为自己间隔了两个星期五再更新本系列文章找个不充分的理由:Rector最近工作,家庭的各种事务所致,希望大家谅解。 本文知识要点 回到本文的主题,还是关于系列文章:《一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar》,本文将为大家分享的主要内容有: 响应式网站首页的布局与制作 文章列表的展示 文章详情页面 前端布局与制作 响应式网站首页的布局与制作 在以本文之前
Rector
2018/03/29
2.8K0
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
高端大气的前端响应式黑色装饰公司网站模板
一个基于HTML,CSS,JS的高端大气的前端响应式黑色装饰公司网站模板,文章中给出了完整的源码
海拥
2021/08/23
2.1K0
高端大气的前端响应式黑色装饰公司网站模板
JavaWeb新手进阶经典项目 & 半小时高效开发 & 海量知识点涵盖 (二)
我们昨天完成了第一部分的开发,即项目搭建和登录、注册功能实现。今天本文将与读者一起实现用户列表的显示、部门模块的显示和头像上传功能。
易兮科技
2020/09/27
1.2K0
JavaWeb新手进阶经典项目 & 半小时高效开发 & 海量知识点涵盖 (二)
Tornado 模板
使用模板 需要仿照静态资源文件路径设置 向web.Application类的构造函数传递一个名为 template_path的参数 来告诉tornado从文件系统的一个特定位置 提供模板文件
星哥玩云
2022/09/14
1.3K0
Web前端知识系列(包括web前端全部知识点)
HTML:Hyper Text Markup Language :超文本标记语言。
软件小生活
2021/09/06
2.3K0
Web前端知识系列(包括web前端全部知识点)
BootStrap案例
响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。 响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着目前大屏幕移动设备的普及,用“大势所趋”来形容也不为过。随着越来越多的设计师采用这个技术,我们不仅看到很多的创新,还看到了一些成形的模式。
不愿意做鱼的小鲸鱼
2022/08/24
7370
BootStrap案例
从头搭建一个flask鉴权系统之登陆
“ 从今天开始,准备从头开始搭建一个基于flask的鉴权系统,一点一滴,积累于生活”
周萝卜
2019/07/17
2.2K0
从头搭建一个flask鉴权系统之登陆
BBS项目(三)
目录 BBS项目(三) 注册forms类编写局部钩子和全局钩子 注册功能前端 注册功能后端 注册功能前端错误渲染 登录页面搭建 验证码 点击刷新验证码 登录功能前后端 首页页面搭建 BBS项目(三) 注册forms类编写局部钩子和全局钩子 '''forms校验''' from django import forms from django.forms import widgets from blog import models from django.core.exceptions import
HammerZe
2022/03/24
7460
BBS项目(三)
36·Python项目-博客(前后不分离)
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/11/08
8540
36·Python项目-博客(前后不分离)
手撸的一个快递查询系统,竟然阅读量过1.8w
做这个项目的初衷是因为我去年在微信卖老家水果,好多朋友下单后都问我快递单号,每天发货后我都要挨个甄别这个人是哪个快递信息,很麻烦一部小心就搞错了。基于这件小事我有了自助快递查询的这个想法。将发货的快递信息导入到我的系统里,用户访问我的系统,通过输入手机号就可以查看自己的快递物流信息。 项目是去年8月写的,一直搁浅在哪,最近无意间翻看我发的那篇文章自助快递单号查询阅读量竟然都1.8w了,有图有真相。
不安分的猿人
2020/04/23
1.5K0
手撸的一个快递查询系统,竟然阅读量过1.8w
相关推荐
3分钟搭建一个网站?腾讯云Serverless开发体验
更多 >
LV.1
Alibaba高级后端开发工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档