QQ小程序调用python(后端)代码

问题描述

在开发QQ小程序的过程中,有时候需要用到一些python后端的模型(例如语音识别、图片转文字等等)或者已经实现的python代码。这些代码直接在小程序中实现比较麻烦或者根本不可能实现,这就需要在小程序中完成对现有代码的调用。

解决方案

首先用Flask构建一个Web应用程序框架,然后在小程序中向一个事先规定的url发送请求,接着便可以调用Falsk中相应的函数,以实现所需的功能。

Flask使用

安装

在命令行中输入下列命令进行安装

pip install Flask

测试Flask安装

为了测试 Flask 安装,请在编辑器中将以下代码输入 Hello.py:

import os
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World'

if __name__ == '__main__':
   app.run(debug=False, host='127.0.0.1', port=int(os.environ.get('PORT', 8080)))

必须在项目中导入Flask模块。
Flask构造函数使用当前模块(__name __)的名称作为参数。
Flask类的route()函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。

app.route(rule, options)
  • rule 参数表示与该函数的URL绑定。
  • options 是要转发给基础Rule对象的参数列表。

在上面的示例中,’/ ’ URL与hello_world()函数绑定。因此,当在浏览器中打开web服务器的主页时,将呈现该函数的输出。

最后,Flask类的run()方法在本地开发服务器上运行应用程序。

代码执行后,Python shell会有下列信息提示:

* Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)

在小程序中调用python后端

在小程序中可以使用下列代码调用python后端

qq.request({
    url: 'http://127.0.0.1:8080/', 
    method: "POST",
    data: {},                            //将数据传给后端

    success: function(res){
        console.log(res.data)
    }
})

在data中可以放入我们想传递给后端的数据。

运行上述代码后,由于小程序向http://127.0.0.1:8080/发送了一个请求,这时我们之前编写的Flask框架会收到这个请求,并返回Hello World。

在Flask中接收小程序中的数据

在Flask中使用request.data即可查看小程序中传递的数据,但要首先导入request库,使用下列代码进行导入。

from flask import request
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序登录需要使用微信提供的 API 进行登录验证,具体步骤如下: 1. 在微信公众平台上注册小程序,并获取 AppID 和 AppSecret。 2. 在小程序中使用 `wx.login` 获取 code。 3. 将 code 发送给后端后端使用 AppID 和 AppSecret 构造请求,向微信服务器发送请求获取 session_key 和 openid。 4. 将 session_key 和 openid 存储在后端数据库中,并生成一个 token,将 token 返回给前端。 下面是一个使用 Spring Boot 框架编写的微信小程序登录后端代码示例: ```java @RestController @RequestMapping("/wx") public class WxLoginController { @Autowired private WxLoginService wxLoginService; @PostMapping("/login") public Result<?> login(@RequestBody WxLoginRequest request) { String code = request.getCode(); String encryptedData = request.getEncryptedData(); String iv = request.getIv(); String rawData = request.getRawData(); String signature = request.getSignature(); WxLoginResponse response = wxLoginService.login(code, encryptedData, iv, rawData, signature); return Result.success(response); } } @Service public class WxLoginServiceImpl implements WxLoginService { @Autowired private RedisTemplate<String, Object> redisTemplate; @Override public WxLoginResponse login(String code, String encryptedData, String iv, String rawData, String signature) { // 使用 AppID 和 AppSecret 构造请求 String appId = "your_app_id"; String appSecret = "your_app_secret"; String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + appSecret + "&js_code=" + code + "&grant_type=authorization_code"; // 向微信服务器发送请求获取 session_key 和 openid RestTemplate restTemplate = new RestTemplate(); String response = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(response); String sessionKey = jsonObject.getString("session_key"); String openid = jsonObject.getString("openid"); // 将 sessionKey 和 openid 存储到数据库中 // ... // 生成 token String token = UUID.randomUUID().toString(); redisTemplate.opsForValue().set(token, openid, 30L, TimeUnit.MINUTES); WxLoginResponse wxLoginResponse = new WxLoginResponse(); wxLoginResponse.setToken(token); return wxLoginResponse; } } ``` 在前端,你需要使用 `wx.login` 获取 code,并将 code 发送给后端后端再根据 code 向微信服务器获取 session_key 和 openid。最后,后端根据 openid 生成 token 并返回给前端,前端在后续请求中携带该 token,后端通过 token 验证用户身份。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值