前言
有些时候有一些公共的方法,需要放在服务器上,在不同的电脑上使用。但是我们有没有自己的服务器,所以考虑将公共的方法放在腾讯云、华为云、阿里云、百度云等云平台上,方便在不同的电脑上复用。
我们这里使用的是腾讯云,并且函数的编程语言使用的是python,调用语言也是用的python。这里要特别说明一下,我们的函数不管是用什么语言写的,都可以用python进行调用,和语言是没有任何关系的,反之用python写的函数,也可以用任何语言调用。
一、开通腾讯云函数功能
1、首先进入腾讯云官网,注册一个自己的账号,并且实名验证通过,官网如下:https://cloud.tencent.com/
2、在搜索框输入云函数,进入云函数控制台,如图:
3、点击 函数服务
,点击新建,进入新建云函数页面,如图:
4、首先是基础配置,输入云函数的一些信息,函数类型选择事件函数
、函数名称自己填
、地域我这里选择广州
,看自己实际需求、运行环境选择 python 3.7
、时区选择北京时间
,如图:
5、函数代码先默认,后面在回来改。
6、日志配置勾选启用,方便查看每一次的调用情况,如果说用户角色没有权限的话,可以点击他给我快捷链接过去配置权限即可。
7、高级配置默认即可,也可以自己看需求自己配置。
8、触发器配置先默认不配置,后面在配置。
9、勾选同意、点击完成,云函数创建完成,如图:
10、双击进入函数配置页面,点击触发器,我们要添加一个触发器,否则无法通过url来调用云函数,,点击创建触发器,如图:
配置和我这里一样即可,这里要特别注意两点:
(1)触发方式:要选择API网关触发,也就是通过url调用(如果说没有权限,按照他给的链接点进去授权即可)
(2)集成响应:这个一定要勾选,否则无法传递json格式的数据
配置好之后,点击提交。
等待十几秒,触发器创建完成,如图:
最下面的访问路径就是我们调用云函数的url链接,直接拿到浏览器中进行访问,会显示访问错误,如图:
因为我们设置的是传递json格式的数据,而我们的代码返回的是一个 Hello World
字符串,所以会访问错误。如果我们在创建触发器的时候,取消勾选 集成响应
,此时就会正常返回 字符串不会报错。
到这里,云函数就创建完成了
二、编写云函数代码
每个人的业务逻辑都不一样,这里没什么好说的,我主要说一下,如何拿到本地传递过来的json数据,并且返回json数据给本地。
我们这里模拟接收到用户登录传递过来的用户名和密码,判断是否正确。
2.1 获取本地传来的json数据
我们在本地python代码中是通过requests库来调用腾讯云函数,所以传递过来的参数肯定是放在请求头的 body当中(可以在日志中查找数据对应的键值对),我们可以通过 event
变量来获取body的值,event
就是一个请求头字典,代码如下:
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
print("Received event: " + json.dumps(event, indent = 2))
print("===============================")
print("Received context: " + str(context))
# 拿到本地python传来的参数,并装换为字典格式
json_params = json.loads(event.get("body"))
print("--------------------------")
print(json_params)
如果我们本地传来的json字符串为:
{"user_name": "admin", "password": "123456"}
则 json_params
变量就是以 {"user_name": "admin", "password": "123456"}
为值的字典变量,我们就可以很方便的获取到里面的值了。
2.2 封装json数据返回给本地程序
按照我给我格式进行封装,直接retuen回去即可,代码如下:
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
# 封装为特定的数据给腾讯的统一出口
ret = {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"},
"body": json.dumps({"user_name": "admin", "password": "123456"})
}
return ret
这样,就可以返回json数据给本地程序了。
2.3 完整代码
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
print("Received event: " + json.dumps(event, indent = 2))
print("===============================")
print("Received context: " + str(context))
# 拿到qt传来的参数
json_params = json.loads(event.get("body"))
print("--------------------------")
print(json_params)
# 获取用户名和密码
user_name = json_params.get("user_name")
print("用户名为:", user_name)
password = json_params.get("password")
print("密码为:", password)
# 模拟查询数据库
if user_name == "admin" and password == "123456":
login_ret = {"errno": 0, "errmsg": "登录成功"}
else:
login_ret = {"errno": 1001, "errmsg": "登录失败!您输入的用户名密码为%s:%s 正确的用户名密码为:admin:123456" %
(user_name, password)}
# 封装为特定的数据给腾讯的统一出口
ret = {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"},
"body": json.dumps(login_ret)
}
return ret
三、本地程序调用云函数
先安装 requests
模块:
pip install requests -i https://pypi.douban.com/simple
使用 post
请求调用云函数,代码如下:
r = requests.post(url='https://service-q82pfbii-1318381894.gz.apigw.tencentcs.com/release/qt_login', json={"user_name": "admin", "password": "123456"})
ret = r.json() # 获取返回的json数据 ({"errno": 0, "errmsg": "登录成功"})
获得返回的数据之后就可以继续执行下面的逻辑了,对你有帮助的话,希望您能一键三连!!!