微信小程序 后端用Flask實現


手上有個微信小程序項目,因為對Python相對熟悉一些,打算后端用python寫,具體采用python 輕量級的flask框架。

在做的過程中,有些問題需要考慮,記錄在下邊.

 

1. 開發的小程序后端怎么區分不同的小程序用戶?

  或者說有哪些屬性可以唯一的標識一個用戶呢?首先想到的是 微信號,手機號,微信號好像現在還沒有API可以獲取,手機號又比較麻煩還涉及到讀取用戶信息,進一步的做法是用openid, unionid, 比如讓用戶每次請求都帶上openid, 然后在后台看是否有這個Openid 信息,這是一種方法,這樣做相當於把openid 當做web開發里常用的session id 來使用了,區分用戶的作用是起到了,但是用一個一成不變的openid 來識別用戶是有安全風險的,萬一泄露了別人也可以偽裝成你來像后台發請求. 既然提到了session id, 那么更好的方案應該是在后台維護 自定義登錄態的session[1] 和 openid 的Map表,前后端的用戶唯一標識用session id,當識別到是一個的用戶的 session 就根據map表找到openid, 再做進一步的操作.

    我的小程序在開始階段就是用 openid放在payload里來識別用戶. 有沒有更更好的方案呢?應該上token機制,OAuth或者JWT走起,就更加安全了. 我最終選用的方案是 我的flask 學習筆記 里的第7條用到的token方案,簡單好用!

 

2. 小程序怎么同步調用?

  看到微信小程序的API 都是異步調用的,比如 app.onLauch 和 page.onLoad, 雖然app.onLauch 先與page.onLoad調用,但是很可能onLoad 執行完成以后onLauch才完成。但是有些時候我們再onLoad里又依賴於onLoad 執行的結果,這時候怎么做到同步調用呢?現在我還不知道,如果有大神有幸看到這里,多謝指點!好像有個callback 功能,還沒有去試過

 

3. page里可以根據變量自動跳轉到其他界面嗎?

  目前沒有找到自動跳轉的方法, 都是需要用戶觸發的,用戶觸發的操作可以是在wxml馬上跳轉 (如 <nagivator>), 也可以是在js 里調用API跳轉(如 wx.redirect)

 

4. flask 是怎么處理並發的,應用程序需要考慮多進程多線程問題嗎?

   flask 的app.run()有兩個參數threaded和processes可以控制多線程和多進程,默認threaded=False, process=1, 也就是默認不支持多線程和多進程. 下面源碼可以看出也不能同時支持多線程和多進程

 

def make_server(host=None, port=None, app=None, threaded=False, processes=1,
                request_handler=None, passthrough_errors=False,
                ssl_context=None, fd=None):
    """Create a new server instance that is either threaded, or forks
    or just processes one request after another.
    """
    if threaded and processes > 1:
        raise ValueError("cannot have a multithreaded and "
                         "multi process server.")
    elif threaded:
        return ThreadedWSGIServer(host, port, app, request_handler,
                                  passthrough_errors, ssl_context, fd=fd)
    elif processes > 1:
        return ForkingWSGIServer(host, port, app, processes, request_handler,
                                 passthrough_errors, ssl_context, fd=fd)
    else:
        return BaseWSGIServer(host, port, app, request_handler,
                              passthrough_errors, ssl_context, fd=fd)

BaseWSGIServer 這個類是使用IO 多路復用的, 關於IO多路復用,可以參考我另一個篇文章 什么是IO多路復用

 

Ref:

flask 源碼淺析(flask 如何處理請求(多線程,多進程,IO多路復用))

 

Ref:

[1] 微信小程序中做用戶登錄與登錄態維護的實現詳解

[2] 小程序的登錄和數據解密全解析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM