欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Flask 搭建微信小程序后臺(tái)詳解

 更新時(shí)間:2019年05月06日 10:50:19   作者:飄逸高鐵俠  
這篇文章主要介紹了Python Flask 搭建微信小程序后臺(tái),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言:

近期需要開發(fā)一個(gè)打分的微信小程序,涉及到與后臺(tái)服務(wù)器的數(shù)據(jù)交互,因?yàn)闃I(yè)務(wù)邏輯相對(duì)簡單,故選擇Python的輕量化web框架Flask來搭建后臺(tái)程序。因?yàn)槭浅醮谓佑|小程序,經(jīng)過一番摸索和嘗試,個(gè)人覺得的微信小程序與后臺(tái)的交互有點(diǎn)像ajax,所以有ajax開發(fā)經(jīng)驗(yàn)的同學(xué)開發(fā)小程序應(yīng)該很容易上手,因?yàn)楸疚闹刂v解后臺(tái)程序的搭建,所以,微信小程序的前端開發(fā)將一筆帶過,有興趣學(xué)習(xí)小程序前端語言的同學(xué)可移步網(wǎng)易云課堂的一套快速入門課程《輕松玩轉(zhuǎn)微信小程序》。

分三步講解微信小程序與Python后臺(tái)交互數(shù)據(jù)的全過程

小程序向后臺(tái)服務(wù)器提交數(shù)據(jù)。微信小程序?yàn)閿?shù)據(jù)提交開發(fā)了一個(gè)API,其實(shí)是一個(gè)js函數(shù),詳細(xì)介紹可參考官方API文檔《微信小程序API文檔》。下面貼下我開發(fā)的項(xiàng)目的數(shù)據(jù)提交js代碼。

wx.request({
   url: 'https://我的后臺(tái)服務(wù)器網(wǎng)址/score',
   data: {
   acc_nbr:JSON.stringify(acc_nbr),
   grade1: JSON.stringify(grade1), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
   grade2: JSON.stringify(grade2), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
   grade3: JSON.stringify(grade3), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
   txt1:JSON.stringify(txt1),
   txt2:JSON.stringify(txt2),
   txt3:JSON.stringify(txt3)
   },
   method: "POST",
   header: {
   'content-type': 'application/x-www-form-urlencoded',
   'chartset': 'utf-8'
   }

代碼參數(shù)講解:
url: 'https://我的后臺(tái)服務(wù)器地址/score',url參數(shù)是數(shù)據(jù)提交的地址,有點(diǎn)像html里表單提交里的action,微信小程序?qū)笈_(tái)接入的服務(wù)器要求很高,需要具備已備案的能夠解析的https域名,我的服務(wù)器使用的阿里云,網(wǎng)站架構(gòu)使用的是

Nginx+supervisor+gunicorn+flask經(jīng)典Python_flask 部署架構(gòu),此架構(gòu)的部署學(xué)習(xí)可移步我的云筆記flask部署。
data: data參數(shù)是要提交的數(shù)據(jù),數(shù)據(jù)需要轉(zhuǎn)換成json格式,使用JSON的stringify函數(shù),可以看到data的數(shù)據(jù)類型是JavaScript的對(duì)象類型,也就是俗稱的鍵值對(duì)。

methon:是數(shù)據(jù)提交的請(qǐng)求方式,默認(rèn)是post請(qǐng)求方式,后臺(tái)在處理請(qǐng)求時(shí)會(huì)判斷請(qǐng)求方式。
header:是數(shù)據(jù)的頭文件,需要設(shè)置字符類型為utf-8,即'charset':'utf-8',防止傳輸中文數(shù)據(jù)時(shí)出現(xiàn)亂碼。

wx.requset()函數(shù)被調(diào)用后,會(huì)向后臺(tái)服務(wù)器發(fā)起數(shù)據(jù)的post請(qǐng)求,此時(shí)小程序會(huì)把data里的數(shù)據(jù)以post形式向url對(duì)應(yīng)的服務(wù)器提交,下面講解第二部分也是本文重點(diǎn),即后臺(tái)服務(wù)器接受到小程序的請(qǐng)求后,怎么處理并返回信息

后臺(tái)服務(wù)器處理請(qǐng)求并返回信息。后臺(tái)服務(wù)器處理請(qǐng)求是使用的Python-flask的輕量化web框架,對(duì)于想學(xué)習(xí)flask的同學(xué)可以移步flask的快速入門課程。下面貼下我開發(fā)的項(xiàng)目的后臺(tái)處理部分的Python-flask代碼。 

# coding=utf8
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
 reload(sys)
 sys.setdefaultencoding(defaultencoding)
from flask import Flask,render_template,request,json
from DB import *
app = Flask(__name__)
@app.route('/')
def hello_world():
 return render_template('index.html')
@app.route('/score',methods=['POST'])
def score():
 in_acc_nbr = str(json.loads(request.values.get("acc_nbr")))
 input_grade1=int(json.loads(request.values.get("grade1")))
 input_grade2 = int(json.loads(request.values.get("grade2")))
 input_grade3 = int(json.loads(request.values.get("grade3")))
 input_txt1=str(json.loads(request.values.get("txt1")))
 input_txt2=str(json.loads(request.values.get("txt2")))
 input_txt3=str(json.loads(request.values.get("txt3")))
 score_db=db('mysql數(shù)據(jù)庫ip地址',3306,'數(shù)據(jù)庫用戶名','數(shù)據(jù)庫密碼','數(shù)據(jù)庫','utf8')
 conn=score_db.connect_db()
 cursor=conn.cursor()
 sql=''' insert into grade (acc_nbr,grade1,grade2,grade3,txt1,txt2,txt3,insert_time) values (%s,%s,%s,%s,'%s','%s','%s',now()) 
 '''%(in_acc_nbr,input_grade1,input_grade2,input_grade3,input_txt1,input_txt2,input_txt3)
 cursor.execute(sql)
 res=cursor.rowcount
 conn.commit()
 cursor.close()
 conn.close()
 if res==1:
  # print res
  res='數(shù)據(jù)提交成功'
  return json.dumps(res.decode('utf8'))
 else:
  print res
  res='數(shù)據(jù)提交失敗'
  return json.dumps(res.decode('utf8'))
if __name__ == '__main__':
 app.run(debug=True)

 代碼詳解:

可以看到這是一段很基礎(chǔ)的flask的代碼。大家應(yīng)該看到了 @app.route('/score',methods=['POST'])這條語句,這就是flask的路由函數(shù),沒錯(cuò),/score 正是小程序提交請(qǐng)求是url里的score路徑,所以這個(gè)路由對(duì)應(yīng)的函數(shù)正是處理請(qǐng)求的后臺(tái)程序。methods=['POST'] 說明這個(gè)路由只處理POST請(qǐng)求。

in_acc_nbr = str(json.loads(request.values.get("acc_nbr"))),這段語句是獲取請(qǐng)求的數(shù)據(jù),首先request.values.get()函數(shù)是獲得request請(qǐng)求里最初的數(shù)據(jù)。"acc_nbr"是小程序data對(duì)象里的鍵,因?yàn)閐ata里的數(shù)據(jù)是json格式,所以request獲取的數(shù)據(jù)也是json格式,使用flask自帶的json.loads 函數(shù)獲取字符數(shù)據(jù)。至此,我們已經(jīng)拿到了小程序提交的數(shù)據(jù)了。

將json數(shù)據(jù)轉(zhuǎn)換成字符數(shù)據(jù)后,就可以進(jìn)行相關(guān)業(yè)務(wù)邏輯的處理,這里我的代碼是將相關(guān)數(shù)據(jù)提交到mysql數(shù)據(jù)庫里。

業(yè)務(wù)邏輯處理完畢后,需要向小程序返回消息和數(shù)據(jù),return json.dumps(res.decode('utf8')) 這段語句是本文的核心。因?yàn)樾〕绦蚪邮軘?shù)據(jù)需要json格式,所以我們的返回?cái)?shù)據(jù)也需要轉(zhuǎn)換成json格式,使用flask自帶的json.dumps函數(shù)即可將字符類型的數(shù)據(jù)轉(zhuǎn)換成json格式的數(shù)據(jù)。

后臺(tái)程序返回了數(shù)據(jù)后,第三步就是小程序該怎么接收返回?cái)?shù)據(jù)并進(jìn)行相關(guān)業(yè)務(wù)邏輯處理。

小程序接收返回?cái)?shù)據(jù)。Python-Flask向小程序返回了JSON格式的數(shù)據(jù)后,小程序的wx.requset()函數(shù)里的SUCESS回調(diào)函數(shù)用來處理返回?cái)?shù)據(jù)。下面貼下項(xiàng)目中wx.requset()函數(shù)中sucess回調(diào)函數(shù)。

wx.request({
   url: 'https://我的后臺(tái)服務(wù)器網(wǎng)址/score',
   data: {
   acc_nbr:JSON.stringify(acc_nbr),
   grade1: JSON.stringify(grade1), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
   grade2: JSON.stringify(grade2), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
   grade3: JSON.stringify(grade3), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
   txt1:JSON.stringify(txt1),
   txt2:JSON.stringify(txt2),
   txt3:JSON.stringify(txt3)
   },
   method: "POST",
   header: {
   'content-type': 'application/x-www-form-urlencoded',
   'chartset': 'utf-8'
   },
   success: function (res) {
    console.log(res.data);
   wx.showToast({
    title: res.data,//這里打印出登錄成功
    icon: 'success',
    duration: 1000
   });
   var acc_nbr = that.data.phoneNum;
   wx.redirectTo({
    url: '../graderesult/graderesult?phoneNum=' + acc_nbr
   })
   }
  })

代碼詳解:單獨(dú)拿出sucess回調(diào)函數(shù)講解。

success: function (res) {
             console.log(res.data);
            wx.showToast({
              title: res.data,//這里打印出登錄成功
              icon: 'success',
              duration: 1000
            });
            var acc_nbr = that.data.phoneNum;
            wx.redirectTo({
              url: '../graderesult/graderesult?phoneNum=' + acc_nbr
            })
          }

res入?yún)⒋鎯?chǔ)的數(shù)據(jù),即res.data,就是第二步后臺(tái)返回的數(shù)據(jù)??梢杂胏onsole.log(res.data)看下返回的數(shù)據(jù)是否正確。

我的項(xiàng)目在拿到后臺(tái)返回的數(shù)據(jù),進(jìn)行了彈窗展示返回?cái)?shù)據(jù)wx.showToast和頁面的跳轉(zhuǎn)wx.redirectTo,大家可以根據(jù)自己的業(yè)務(wù)需求在sucess回調(diào)函數(shù)編寫自己的業(yè)務(wù)邏輯。

結(jié)尾:

至此,微信小程序和Python后臺(tái)交互數(shù)據(jù)的步驟已經(jīng)講完。正如文章開頭所講,學(xué)過ajax的同學(xué)讀完會(huì)發(fā)現(xiàn)微信小程序與后臺(tái)交互數(shù)據(jù)非常像ajax,所以,文章結(jié)尾貼出一個(gè)彩蛋,即神奇的ajax代碼,出自我的另一個(gè)web項(xiàng)目,供大家品鑒^_^~

<script type="text/javascript">
 $(function () {
  $('.btn').click(function () {
   var $result = $('#result');
   var $result1=$('#result1');
   var $acc_nbr = $('input[name="acc_nbr"]').val();
   $.ajax({
     url: '/query',
     data: $('form').serialize(),
     type: 'POST',
     dataType: 'json',
     success: function (data) {
      if (data.length !=0){
       console.log(data.length);
      var str = "";
      var str1="<input value='"+data[0][8]+"'class='form-control' type='hidden' name='acct_id'>" +
       "<input value='"+Math.ceil(data[0][7]*1.5)+"'class=\"form-control\" type=\"text\" name='credit_amount' readonly >" +
       " <button type=\"submit\" class=\"btn btn-primary\">確認(rèn)</button>";
 
      for (s in data) {
       if (data[s][4] == '后付費(fèi)') {
        str = str + "<tr class=\"danger\">"
         + "<td>" + data[s][0] + "</td>"
         + "<td>" + data[s][1] + "</td>"
         + "<td>" + data[s][2] + "</td>"
         + "<td>" + data[s][3] + "</td>"
         + "<td>" + data[s][4] + "</td>"
         + "<td>" + data[s][5] + "</td>"
         + "<td>" + data[s][6] + "</td>"
         + "</tr>"
       }
       else {
        str = str + "<tr class=\"success\">"
         + "<td>" + data[s][0] + "</td>"
         + "<td>" + data[s][1] + "</td>"
         + "<td>" + data[s][2] + "</td>"
         + "<td>" + data[s][3] + "</td>"
         + "<td>" + data[s][4] + "</td>"
         + "<td>" + data[s][5] + "</td>"
         + "<td>" + data[s][6] + "</td>"
         + "</tr>"
 
       }
 
      };
      $result1.html(str1);
      $result.html(str);
 
 
     }
     else {
       alert('此號(hào)碼不在派單內(nèi)?。?);
      }
     }
 
    }
   )
  });
 });
 
</script>

以上所述是小編給大家介紹的Python Flask 搭建微信小程序后臺(tái)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python 統(tǒng)計(jì)代碼耗時(shí)的幾種方法分享

    python 統(tǒng)計(jì)代碼耗時(shí)的幾種方法分享

    本文實(shí)例講述了Python中統(tǒng)計(jì)代碼片段、函數(shù)運(yùn)行耗時(shí)的幾種方法,分享給大家,僅供參考。
    2021-04-04
  • python套接字socket通信

    python套接字socket通信

    這篇文章主要介紹了python套接字socket通信,python標(biāo)準(zhǔn)庫中內(nèi)置了底層網(wǎng)絡(luò)接口socket,以下代碼均默認(rèn)from?socket?import?*,下文很多詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • python迭代器,生成器詳解

    python迭代器,生成器詳解

    這篇文章主要介紹了Python中的迭代器和生成器,涉及到Python中很多重要的特性,小編覺得這篇文章寫的還不錯(cuò),需要的朋友可以參考下
    2021-10-10
  • PyCharm 常用快捷鍵和設(shè)置方法

    PyCharm 常用快捷鍵和設(shè)置方法

    下面小編就為大家分享一篇PyCharm 常用快捷鍵和設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python 尋找局部最高點(diǎn)的實(shí)現(xiàn)

    Python 尋找局部最高點(diǎn)的實(shí)現(xiàn)

    今天小編就為大家分享一篇Python 尋找局部最高點(diǎn)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中的@cache巧妙用法

    Python中的@cache巧妙用法

    緩存是一種空間換時(shí)間的策略,緩存的設(shè)置可以提高計(jì)算機(jī)系統(tǒng)的性能,這篇文章主要介紹了Python中的@cache巧妙用法,需要的朋友可以參考下
    2023-04-04
  • Django+JS 實(shí)現(xiàn)點(diǎn)擊頭像即可更改頭像的方法示例

    Django+JS 實(shí)現(xiàn)點(diǎn)擊頭像即可更改頭像的方法示例

    這篇文章主要介紹了Django+JS 實(shí)現(xiàn)點(diǎn)擊頭像即可更改頭像的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • python try except返回異常的信息字符串代碼實(shí)例

    python try except返回異常的信息字符串代碼實(shí)例

    這篇文章主要介紹了python try except返回異常的信息字符串代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python實(shí)現(xiàn)身份證號(hào)碼解析

    Python實(shí)現(xiàn)身份證號(hào)碼解析

    本文給大家匯總介紹下使用Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證解析的幾個(gè)方法,有需要的小伙伴可以參考下。
    2015-09-09
  • UI自動(dòng)化定位常用實(shí)現(xiàn)方法代碼示例

    UI自動(dòng)化定位常用實(shí)現(xiàn)方法代碼示例

    這篇文章主要介紹了UI自動(dòng)化定位常用實(shí)現(xiàn)方法代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論