Python调用腾讯云函数传递json数据

14 篇文章 0 订阅

前言

  有些时候有一些公共的方法,需要放在服务器上,在不同的电脑上使用。但是我们有没有自己的服务器,所以考虑将公共的方法放在腾讯云、华为云、阿里云、百度云等云平台上,方便在不同的电脑上复用。

  我们这里使用的是腾讯云,并且函数的编程语言使用的是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": "登录成功"})

  获得返回的数据之后就可以继续执行下面的逻辑了,对你有帮助的话,希望您能一键三连!!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃雪糕的小布丁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值