Python 作為小程式後端的三種方法

語言: CN / TW / HK

你好,我是徵哥。微信的小程式是一個很不錯的體驗,簡單,上手快,這幾天也在學習使用小程式,自己總結了三種用 Python 作為小程式後端的方式,供你參考。

方法一、微信的雲託管[1]。

優點:不需要購買伺服器,不需要域名備案,按使用量計費,DevOps 自動化,安全鑑權,適合沒有運維經驗的人。

缺點:費用這塊,肯定是比自建伺服器費用略高的。就像同一車型,自動擋的車比手動擋的車更貴一樣。

所謂雲託管,就是一個 Docker 容器,你只需要弄一個倉庫,可以 github, gitlab, gitee 中的任意一個建立倉庫,寫好 Dockerfile,上傳到雲託管,雲託管會自動構建容器映象並執行,執行容器的方式都是可以自定義的。部署完成後,我們會得到一個預設域名地址,就是服務對外提供服務的入口,你可以將其按照正常的服務來呼叫訪問,也可以繫結自己的域名。

小程式中,可以這樣訪問容器服務:

// 確認已經在 onLaunch 中呼叫過 wx.cloud.init 初始化環境(任意環境均可,可以填空)
const res = await wx.cloud.callContainer({
  config: {
    env: '填入雲環境ID', // 微信雲託管的環境ID
  },
  path: '/xxx', // 填入業務自定義路徑和引數,根目錄,就是 / 
  method: 'POST', // 按照自己的業務開發,選擇對應的方法
  header: {
    'X-WX-SERVICE': 'xxx', // xxx中填入服務名稱(微信雲託管 - 服務管理 - 服務列表 - 服務名稱),在上述實踐中是 demo
  }
  // 其餘引數同 wx.request
});
console.log(res);

有了容器,後端用什麼程式語言都是可以的,就看自己擅長啥了, Python 絕對沒問題,而且官方有 Django 模版,一鍵部署。

方法二、微信的雲函式中轉[2]

優點:不需要域名備案,有一定的免費額度。

缺點:自己配置伺服器

所謂雲函式,就是執行在騰訊雲端的 Node.js 函式,只有計算邏輯,可以無縫訪問雲資料庫進行資料存取。

小程式端這樣呼叫雲函式:

wx.cloud.callFunction({
  // 要呼叫的雲函式名稱
  name: 'dailyexam',
  // 傳遞給雲函式的event引數
  data: {
    x: 1,
    y: 2,
  }
}).then(res => {
  // output: res.result === 3
}).catch(err => {
  // handle error
})

Node.js 函式其實就是非同步的 javascript 函式,在雲函式裡面,我們可以請求自建伺服器上的服務,這樣域名就不需要備案了,比如下面的程式碼中,域名 somenzz.cn 是沒有備案的。

雲函式端這樣呼叫自建 API 服務:

免費額度通常很少,資料庫日讀取次數不能超過 500,寫次數不能超過 300。

因為自建服務,自然可以用 Python 開發。

方法三:自建伺服器,備案域名

優點:省錢,訪問量越大越省錢。

缺點:需要備案域名。

不使用雲函式和雲託管,那就只能在小程式端使用 wx.request 函式來請求自建服務:

wx.request({
  url: 'example.php', //僅為示例,並非真實的介面地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 預設值
  },
  success (res) {
    console.log(res.data)
  }
})

而 wx.request 函式有使用限制,如下:

通常你需要國內的伺服器,然後備案域名,而備案,通常會勸退很大一部分開發者。

因為自建伺服器,當然可以用 Python 開發啦。

參考資料

[1]微信的雲託管: http://cloud.weixin.qq.com/cloudrun?utm_source=idecloudconsole

[2]微信的雲函式中轉: http://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/capabilities.html#雲函式