randint函数_静态网站利用云函数 SCF + API 网关访问自定义后端接口

news/2024/5/20 14:21:33/文章来源:https://blog.csdn.net/weixin_39626180/article/details/110983423

本文介绍使用全静态页面的网站如何利用腾讯云的 SCF+API 服务实现简单的后端接口,并提供了一个 Python 出题器的实例演示。

53a3abfa46f869ea249bacb1198308e6.png

相关服务介绍:

云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。 API 网关(API Gateway)是 API 托管服务,提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等。

前几天为我家小盆友用 Python 写了个简单的自动数学题出题器,小家伙十分好奇,隔三差五的就要来让我演示一番 。只是每次都要拿本出来输命令给他看实在有些麻烦,于是想着能不能加个前端页面调用,直接打开页面就能看到运行效果。

作为一个行动派派,我目标锁定了用 SCF+API 的方式,也就是现在很的 serveless 方案。最大的好处当然是不用再伺候服务器了,少了很多搭建的麻烦。而且这个按实际使用量计费,对于小网站再适合不过了。

下面介绍下要怎么实现了。首先,你要有个腾讯云账号,然后参考的简单步骤:

  1. 创建云函数 SCF。
  2. 创建 API Gateway,后台指定调用步骤 1 建好的云函数。
  3. API gateway中 新建密钥,使用计划,实现访问控制并发布。
  4. 写前端页面,调用刚写好的 API。
  5. 测试,解决各种 bug,大功告成!

创建云函数 SCF

照着这个文档 云函数快速入门 按里面的步骤来创建自己业务函数。第一次可以选择使用控制台创建函数,运行环境中选择自己熟悉的编程语言,当前支持 python, php, golang, java, nodejs 几种,然后就可以在函数代码下愉快的开始了。这里以运行环境 Python3.6 为例。默认的入口函数是 index.main_handler,有两个输入参数:

  • event:可以获取触发源的消息 - 主要用来获取传入参数
  • context:可以获取本函数的环境及配置信息。

不清楚参数里有什么的,或怎么用的,可以直接打印出来看看,都是 dict 类型,一目了然。建议加上传入参数检查和限制,毕竟我们不知道调用接口的人会传些什么奇怪的东西。返回类型包装成 json 格式,对前端调用更友好。给出改好的代码:

# -*- coding: utf8 -*-import sys, getopt, randomimport jsondef main_handler(event, context):    print("Received event: %s" % event)    print("Received context: %s" % context)    params = event["queryString"]    return auto_cal_generator(int(params["limit"]), int(params["op_count"]), params["op_type"].split(","), int(params["total"]))def auto_cal_generator(limit=100, op_count=1, op_type=["+"], total=100):    if limit>999 or op_count>9 or total>99:        return "exceed max input limit"    res = {}    res["msg"] = "Here are today's %d works, good luck!" % total    questions = []    l = len(op_type)-1    for j in range(0, total):        up = limit        question = ""        for i in range(0, op_count+1):            num = 0            if i == 0:                num = random.randint(1,max(1,min(limit,up)))                question = "%s%d" % (question, num)                up -= num                continue            op = "+"            if limit - up > 0:                op_i = random.randint(0,l)                op = op_type[op_i]            question = "%s%s" % (question, op)            if op =="+":                num = random.randint(1,max(1,min(limit,up)))                up -= num            elif op == "-":                num = random.randint(1,max(limit-up, 1))                up += num            else:                print("operator error: %s" % op)                sys.exit(1)            question = "%s%d" % (question, num)        questions.append("%d: %s=" % (j+1, question))    res["questions"] = questions    return json.dumps(res)

写完 code 后当然不能忘了最重要的测试工作,代码输入框下就是测试的入口,需要创建测试模板。系统已经预置了好几种模板类型,直接拿来改成你需要的就好。我们用 API Gateway 事件模板为原型修改刚写好的出题器的测试模板。由于我们 code 获取的是 event 里的 queryString,这里只用修改里面的 queryString 这块:

"queryString": {  "op_type" : "+,-",  "op_count" : 2,  "limit":100,  "total":10 },

创建完测试模板后,点击左侧测试,瞬间返回结果:

返回结果"{"msg": "Here are today's 10 works, good luck!", "questions": "1: 76-4-44=", "2: 52-42+67=", "3: 95+4-50=", "4: 84-78-1=", "5: 29-20-9=", "6: 19+37+38=", "7: 93-53+57=", "8: 80+7+7=", "9: 90-74-11=", "10: 7+34+52="}"

结果下方还有执行摘要执行日志,方便调试。

创建 API Gateway

云函数 SCF 写完后,如果想要能通过网络 http(s) 请求直接访问,就要为其添加触发方式为 API 网关触发器。同时强烈建议将鉴权方法置为 API 网关密钥对。然后就会在 API Gateway 下自动创建出一个对应的 service API。这一步如果遇到权限问题无法自动创建 API 的话,也不要着急,可以直接在 API gateway 的控制台操作。

参考:API 网关快速入门。

创建 API 时注意将鉴权类型改成密钥对。下方有个支持CORS的选项,如果需要跨域访问就勾上,反之可以忽略。设置完需要接收的参数后,在下一步的后端配置中选后端类型为 cloud function 后,选中刚建好的云函数,就做好了这两者的关联。

建好 API 后,来到对应服务下的管理 API 标签就能看到刚建好的 API。在列表的右侧有调试入口,千万不要忘了点进去做下测试。测试完成后,再到服务页完成发布,这样 API 就可以被访问到了。

访问控制

然后,就来到了相当重要但也容易被忽略的访问控制这步。在前面我们已经选择了密钥对的方式作为鉴权类型。虽然有密钥泄露的风险,但对于小网站来说这个验证也是足够了,记得保存好密钥并定期修改就好。

之后的步骤就是创建密钥对,创建使用计划绑定密钥对,再把使用计划绑定服务或 API。下面直接甩出文档:使用计划。使用计划中除了可以绑定密钥对,还可以进行流量控制,可按需设置。

前端调用

配置完后端服务后,要解决的就是访问的问题了。由于没钱供服务器,用的是静态页面托管的方式建的站。前端直接 ajax 访问 API 来获取结果。参考文档在此:密钥对认证,如何生成签名(里面给出了用不同语言生成签名的例子)。

由于没写前端好多年,对前端的认知还停留在 js 和 jquery 阶段,这里只能给出改好的 jquery 写法。用的是 crypto-js 加密。

//function getHeader(){    var nowDate = new Date();    var dateTime = nowDate.toGMTString();    var SecretId = '****';    var SecretKey = '****';    var source = 'your_source';    var auth = "hmac id="" + SecretId + "", algorithm="hmac-sha1", headers="x-date source", signature="";    var signStr = "x-date: " + dateTime + "" + "source: " + source;    var sign = CryptoJS.HmacSHA1(signStr, SecretKey)    sign = CryptoJS.enc.Base64.stringify(sign)    sign = auth + sign + """    var header = {"Source": source , "X-Date": dateTime , "Authorization":sign}    return header}function getQ(){    $.ajax({        url: "https://xxxx/xx",        type: "get",        data:{            "op_count" : 1,            "op_type" : "+,-",            "limit" : 100,            "total" : 10        },        dataType: "json",        crossDomain: true,        headers: getHeader(),        success: function (data) {            if (data.errorCode < 0){                //deal function error: data.errorMessage                return            }            data= $.parseJSON(data);            //show result in page        },        error: function(jqXHR, textStatus, errorThrown){            //deal api error        }    })}

如果在前面创建 API gateway 的 service 时候没有指定自定义域名,或是自定义域名和调用页面的域名不是同一个,就会涉及到跨域的问题。解决跨域问题传统的方法可以用 jsonp。但它没办法在 request 的 Header 里加参数,也就传不了鉴权所需的字段。所以这里只能用 CORS 来解决跨域:

对于服务端,只要前面建 API 的时候勾选了支持 CORS 选项,就会自动开启,参考 API 控制台相关问题 。对于客户端,在 ajax 参数中设置 crossDomain: true 就可以了。

完成

最后,解决一下页面上的 bug,测试通过后就大功告成了!给出演示地址:演示,还加上了打印功能,不用再复制粘贴了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_791406.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 字加白色透明,如何给网站背景加一个白色的透明文字

如何给网站背景加一个白色的透明文字如何给网站背景加一个白色的透明文字&#xff0c;如果对你有帮助就看看吧。那么如何给网站背景添加呢?其实也很简单&#xff0c;只需要一些代码即可实现&#xff0c;这个代码呢也是站长在其他地方发现的&#xff0c;就感觉还不错就拿过来用…

基于SSM的模板项目运动网站(附源码链接)

基于SSM的体适能运动协会 基于SSM的体适能运动协会项目属于SSM的一个综合实例项目&#xff0c;很多类似的项目都可在上面进行扩展。整个项目包括前台与后台&#xff0c;它不仅包括前台资源的展示&#xff0c;也包含了后台数据的实时更新等。此项目适用于毕设也适用于地方机构网…

火狐firefox,IE,网站变灰变黑兼容代码

内容提要&#xff1a; 大家都知道在IE浏览器中&#xff0c;可以使用一段代码 body {filter: gray;} 用微软的滤镜代码将网站整体去色成为黑白灰色调效果&#xff0c;但是并不兼容firefox等其他非IE浏览器。大家都知道在IE浏览器中&#xff0c;可以使用一段代码 body {filter: g…

树莓派raspbian大小_想自己搭建服务器,永久运行网站?一个U盘大小的树莓派就够了!...

来自&#xff1a;https://urlify.cn/nqaQVfNo.1前言由于本人在这段时候&#xff0c;看到了一个叫做树莓派的东东&#xff0c;初步了解之后觉得很有意思&#xff0c;于是想把整个过程记录下来。No.2树莓派是什么&#xff1f;Raspberry Pi(中文名为树莓派,简写为 RPi&#xff0c;…

支付宝当面付扫码支付支付后不回调_对接支付宝当面付进行电脑网站和手机网站收款教程...

对接支付宝当面付进行电脑网站和手机网站收款教程第一步&#xff1a;风铃自动卡密发卡平台前端搭建第二步&#xff1a;对接支付宝当面付进行电脑网站和手机网站收款项目地址&#xff1a;https://github.com/Tai7sy/card-system该系统采用Laravel / Vue MuseUI Element &#…

建站篇——分享按钮

分享控件效果如下 创建步骤&#xff1a;1. 打开百度分享源码获取页面http://share.baidu.com/get-codes 2.选择一个样式&#xff0c;复制代码 3.放入你的网页。 转载于:https://www.cnblogs.com/tuyile006/archive/2012/06/28/2568725.html

【年度盛宴】2012年排名前20位的 CSS 网站作品

2012年涌现出众多独特的&#xff0c;令人印象深刻的 CSS 网站作品&#xff0c;要从中挑选出年度应用 CSS 的最佳网站列表一个严峻的挑战&#xff0c;因为 CSS 涵盖了媒体查询&#xff08;CSS3 Media Queries&#xff09;、CSS 动画和3D转换等众多特性。我根据过去 CSS 典型的应…

全中文配音!微软Halo版 Visual Studio 程序员“直面挑战”网站

微软真的是挺能搞的.做了一个 Visual Studio 程序员“直面挑战”网站的宣传站点,用Halo风格做的视频,全中文配音,配音挺幽默的推荐程序员朋友们访问,另外这个网页的技术也非常炫,值得大家去欣赏.访问:Visual Studio 程序员“直面挑战”转载于:https://www.cnblogs.com/AlphaWu/…

分享12套超酷的后台管理员界面网站模板

日期&#xff1a;2012-10-16 来源&#xff1a;GBin1.com 在上次的文章中我们介绍了一套超酷的黑色系单页面网站模板&#xff0c;今天我们带来了12套超棒的管理员专用网站模板&#xff0c;希望大家喜欢&#xff01; 在这些超棒的网站模板可以直接应用到其它的开源CMS &#xff…

linux mysql服务自动关闭_【实战演练】Linux操作系统05-用LAMP搭建网站

#本文欢迎转载&#xff0c;转载请注明出处和作者。前面已经介绍过linux安装与基本命令以及用yum源安装程序了。今天开始讲述如何在linux里面搭建一些服务&#xff0c;其中&#xff0c;我们先搭建一个网站。由于只是聊的linux搭建服务的操作&#xff0c;所以是不涉及任何的网站开…

大流量、高并发网站验证码解决方案

最近不知道怎么的&#xff0c;总是喜欢研究一些大型站点的一些功能的实现&#xff0c;这两天看了下几个大型站的验证码的实现&#xff0c;觉得有点意思。 于是在.Net下也实现了一套类似的机制。我们先来看看这几个站的验证码功能的外在表现&#xff1a; 看QQ的&#xff0c;网站…

prerender html5,HTML5 VUE单页应用 SEO 优化之 预渲染(prerender-spa-plugin)

前言&#xff1a;当前 SPA 架构流行的趋势如日中天&#xff0c;前后端分离的业务模式已经成为互联网开发的主流方式&#xff0c;但是 单页面 应用始终存在一个痛点&#xff0c;那就是 SEO&#xff0c;对于那些需要推广&#xff0c;希望能在百度搜索时排名靠前的网站而言&#x…

织梦dedecms网站首页标题被恶意非法篡改乱码解决办法!!

dedecms被篡改问题让很多人头疼&#xff0c;还有的网站中毒了会跳转到BC网站&#xff0c;赌博、彩票网站上去了&#xff0c;网站在百度搜索出现&#xff1a;百度网址安全中心提醒您&#xff1a;该站点可能受到黑客攻击&#xff0c;部分页面已被非法篡… 近期&#xff0c;我的诸…

酷站欣赏:33个优秀的淡黄色风格网站设计作品

选择颜色是网页设计的一个重要方面。Web 和图形设计人员会仔细挑选一种颜色&#xff0c;以吸引读者的注意力。黄色作为一种明亮的和令人兴奋的颜色&#xff0c;比较能够抓住读者的注意力。在这篇文章中&#xff0c;我挑选了33个优秀的黄色风格网站&#xff0c;希望能够带给你灵…

微软StockTrader 2.03 学习笔记(3)--配置网站和配置服务在StockTrader中的使用示例

有关配置网站和配置服务在StockTrader 3.0中使用&#xff0c;微软在其提供的配置说明文档中已经做了很详细的说明。基本上是一步一步傻瓜式的阐述的&#xff0c;在这里也就简单的在文档中摘选一下重点简单的做一下记录&#xff0c;理一下整个配置使用过程。 首先先简单介绍一下…

评估您的网站/博客的价值

http://www.stimator.com/ 这个网站可以对你的网站进行价值评估&#xff0c;可以试一下 转载于:https://www.cnblogs.com/andylaufzf/archive/2009/03/27/1423379.html

[转载]杨建:网站加速--动态应用篇 (上)

原文地址&#xff1a;杨建&#xff1a;网站加速--动态应用篇 (上)作者&#xff1a;iyangjian2005997--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一, 引子二&#xff0c;总体结构图三&#xff0c;系统结构综述四&#xff0c;环境配置以及底层…

ASP.NET的SEO: 服务器控件背后——SEO友好的Html和JavaScript

本系列目录 假设你需要从一个页面转向其他页面&#xff0c;下面有很多种方式&#xff0c;你是如何选择的呢&#xff1f;你能清晰的说明理由么&#xff1f;<%--链接的表现形式--%><asp:HyperLink ID"HyperLink1"runat"server"NavigateUrl"~/…

Web开发者必须收藏的十大网站【转】

http://article.yeeyan.org/view/158539/110702 对我们这些Web开发者来说&#xff0c;不计其数的网站&#xff0c;其中有些对我们来说是相当有用的工具。在本文中&#xff0c;我汇编了10个顶有用的网站&#xff0c;可以说每个开发者都应当将这些网站存为自己的书签。 Mysql For…

分享12个非常好的免费矢量资源网站

在工作中&#xff0c;Web设计师经常需要到网上查找一些免费资源以更快更好的完成设计任务。这些资源都是到用时方恨少啊&#xff0c;所以今天本文与大家分享12个非常好的免费矢量资源网站&#xff0c;大家可收藏起来备用 :) QVectors Vecteezy Dezignus TutorialBlog Vector Po…