91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python代碼實現小程序登錄流程時序

發布時間:2022-04-13 10:44:07 來源:億速云 閱讀:238 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么用python代碼實現小程序登錄流程時序”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用python代碼實現小程序登錄流程時序”文章能幫助大家解決問題。

小程序登錄

小程序可以通過微信官方提供的登錄能力方便地獲取微信提供的用戶身份標識,快速建立小程序內的用戶體系。

登錄流程時序

怎么用python代碼實現小程序登錄流程時序

說明:

  • 調用wx.login()獲取臨時登錄憑證code,并回傳到開發者服務器

  • 調用auth.code2Session接口,換取用戶唯一標識 OpenID和會話密鑰 session_key。

之后開發者服務器可以根據用戶標識來生成自定義登錄態,用于后續業務邏輯中前后端交互時識別用戶身份。

注意:

  • 會話密鑰session_key是對用戶數據進行加密簽名的密鑰。為了應用自身的數據安全,開發者服務器不應該把會話密鑰下發到小程序,也不應該對外提供這個密鑰。

  • 臨時登錄憑證 code 只能使用一次

小程序的登錄總結

1 小程序端執行wx.login()獲取code

2 將1中的code發送到后端,后端調用auth.code2Session這個接口,得到openid和session_key

3 自定義登入狀態,我們生成一個key與openid和session_key相綁定。把key返回到小程序中

4 小程序端保存,然后下次請求需要登入的接口的時候,把key帶上。

案例

# app.js的onLaunch中   因為登錄是用戶感覺不到的
App({
  onLaunch: function () {
    let that = this
    // 登錄
    wx.login({
      success: res => {
        // 發送 res.code 到后臺換取 openId, sessionKey, unionId
        console.log(res.code)   //拿到code
        wx.request({
          url:that.globalData.baseurl+"/login/",
          data:{'code':res.code},
          method:'POST',
          success(e){
            console.log(e.data)
            // wx.setStorageSync("token", e.data.data.token)
            
          }
        })
      }
    }),
    globalData: {
    userInfo: null,
    baseurl:"http://127.0.0.1:8000"
  }
# dango后臺中
# urls.py 路由中
path('login/', user.Login.as_view()),
# user.py中
from rest_framework.views import APIView
from rest_framework.response import Response
from api.wx import wx_login
import hashlib, time
from django.core.cache import cache
from api.models import Wxuser
class Login(APIView):
    def post(self, request):
        param = request.data
        print(request.data)
        if not param.get('code'):
            return Response({"status": 1, "msg": '缺少參數'})
        else:
            code = param.get("code")
            user_data = wx_login.get_login_info(code)
            if user_data:
                val = user_data['session_key'] + "&" + user_data['openid']
                md5 = hashlib.md5()
                md5.update(str(time.clock()).encode("utf-8"))
                key = md5.hexdigest()
                cache.set(key, val)  # 放進內存redis庫中,把key傳給前端當token.下次前臺帶著key就能拿到val
                has_user = Wxuser.objects.filter(openid=user_data['openid']).first()  # 判斷openid是否存在
                if not has_user:
                    Wxuser.objects.create(openid=user_data['openid'])
                return Response({
                    "status": 0,
                    "msg": "ok",
                    "data": {"token": key}
                })
            else:
                return Response({"status": 2, "data": "無效的code"})
# models.py中:
from django.db import models
class Wxuser(models.Model):
    id = models.AutoField(primary_key=True)
    openid=models.CharField(max_length=255)
    name = models.CharField(max_length=50)
    avatar = models.CharField(max_length=200)
    language = models.CharField(max_length=50)
    province = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    #gender = models.CharField(max_length=50)
    creat_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.openid
# settings.py中:自己注冊的微信小程序信息
AppId=""
AppSecret=""
code2Session="https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code"
# wx_login.py中:
from api.wx import settings
import requests
def get_login_info(code):
    # 拼接路徑
    code_url = settings.code2Session.format(settings.AppId,settings.AppSecret,code)
    response = requests.get(code_url)  # 返回的是json數據
    json_response = response.json()    # 把json數據轉換為字典
    if json_response.get('session_key'):
        return json_response
    else:
        return False
# cache緩存配置redis數據庫

關于“怎么用python代碼實現小程序登錄流程時序”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达尔| 满城县| 南京市| 确山县| 望谟县| 察哈| 芷江| 平乐县| 永仁县| 习水县| 自治县| 澄江县| 仲巴县| 天峻县| 双峰县| 安新县| 蓬莱市| 鲁山县| 山阳县| 泸州市| 阜康市| 黄石市| 龙门县| 静安区| 昌乐县| 巴南区| 塘沽区| 田阳县| 绥宁县| 寿阳县| 同仁县| 治多县| 平远县| 皮山县| 万山特区| 江口县| 合江县| 信宜市| 许昌县| 方山县| 甘泉县|