国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
Python Flask 搭建微信小程序后臺詳解

前言:

        近期需要開發(fā)一個打分的微信小程序,涉及到與后臺服務(wù)器的數(shù)據(jù)交互,因為業(yè)務(wù)邏輯相對簡單,故選擇Python的輕量化web框架Flask來搭建后臺程序。因為是初次接觸小程序,經(jīng)過一番摸索和嘗試,個人覺得的微信小程序與后臺的交互有點(diǎn)像ajax,所以有ajax開發(fā)經(jīng)驗的同學(xué)開發(fā)小程序應(yīng)該很容易上手,因為本文著重講解后臺程序的搭建,所以,微信小程序的前端開發(fā)將一筆帶過,有興趣學(xué)習(xí)小程序前端語言的同學(xué)可移步網(wǎng)易云課堂的一套快速入門課程《輕松玩轉(zhuǎn)微信小程序》。

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

  1. 小程序向后臺服務(wù)器提交數(shù)據(jù)。微信小程序為數(shù)據(jù)提交開發(fā)了一個API,其實是一個js函數(shù),詳細(xì)介紹可參考官方API文檔《微信小程序API文檔》。下面貼下我開發(fā)的項目的數(shù)據(jù)提交js代碼。
    1. wx.request({
    2. url: 'https://我的后臺服務(wù)器網(wǎng)址/score',
    3. data: {
    4. acc_nbr:JSON.stringify(acc_nbr),
    5. grade1: JSON.stringify(grade1), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
    6. grade2: JSON.stringify(grade2), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
    7. grade3: JSON.stringify(grade3), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
    8. txt1:JSON.stringify(txt1),
    9. txt2:JSON.stringify(txt2),
    10. txt3:JSON.stringify(txt3)
    11. },
    12. method: "POST",
    13. header: {
    14. 'content-type': 'application/x-www-form-urlencoded',
    15. 'chartset': 'utf-8'
    16. }

    代碼參數(shù)講解:
    url: 'https://我的后臺服務(wù)器地址/score',url參數(shù)是數(shù)據(jù)提交的地址,有點(diǎn)像html里表單提交里的action,微信小程序?qū)笈_接入的服務(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的對象類型,也就是俗稱的鍵值對。
    methon:是數(shù)據(jù)提交的請求方式,默認(rèn)是post請求方式,后臺在處理請求時會判斷請求方式。
    header:是數(shù)據(jù)的頭文件,需要設(shè)置字符類型為utf-8,即'charset':'utf-8',防止傳輸中文數(shù)據(jù)時出現(xiàn)亂碼。
    wx.requset()函數(shù)被調(diào)用后,會向后臺服務(wù)器發(fā)起數(shù)據(jù)的post請求,此時小程序會把data里的數(shù)據(jù)以post形式向url對應(yīng)的服務(wù)器提交,下面講解第二部分也是本文重點(diǎn),即后臺服務(wù)器接受到小程序的請求后,怎么處理并返回信息

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

    1. # coding=utf8
    2. import sys
    3. defaultencoding = 'utf-8'
    4. if sys.getdefaultencoding() != defaultencoding:
    5. reload(sys)
    6. sys.setdefaultencoding(defaultencoding)
    7. from flask import Flask,render_template,request,json
    8. from DB import *
    9. app = Flask(__name__)
    10. @app.route('/')
    11. def hello_world():
    12. return render_template('index.html')
    13. @app.route('/score',methods=['POST'])
    14. def score():
    15. in_acc_nbr = str(json.loads(request.values.get("acc_nbr")))
    16. input_grade1=int(json.loads(request.values.get("grade1")))
    17. input_grade2 = int(json.loads(request.values.get("grade2")))
    18. input_grade3 = int(json.loads(request.values.get("grade3")))
    19. input_txt1=str(json.loads(request.values.get("txt1")))
    20. input_txt2=str(json.loads(request.values.get("txt2")))
    21. input_txt3=str(json.loads(request.values.get("txt3")))
    22. score_db=db('mysql數(shù)據(jù)庫ip地址',3306,'數(shù)據(jù)庫用戶名','數(shù)據(jù)庫密碼','數(shù)據(jù)庫','utf8')
    23. conn=score_db.connect_db()
    24. cursor=conn.cursor()
    25. sql=''' insert into grade (acc_nbr,grade1,grade2,grade3,txt1,txt2,txt3,insert_time) values (%s,%s,%s,%s,'%s','%s','%s',now())
    26. '''%(in_acc_nbr,input_grade1,input_grade2,input_grade3,input_txt1,input_txt2,input_txt3)
    27. cursor.execute(sql)
    28. res=cursor.rowcount
    29. conn.commit()
    30. cursor.close()
    31. conn.close()
    32. if res==1:
    33. # print res
    34. res='數(shù)據(jù)提交成功'
    35. return json.dumps(res.decode('utf8'))
    36. else:
    37. print res
    38. res='數(shù)據(jù)提交失敗'
    39. return json.dumps(res.decode('utf8'))
    40. if __name__ == '__main__':
    41. app.run(debug=True)

    代碼詳解:
          可以看到這是一段很基礎(chǔ)的flask的代碼。大家應(yīng)該看到了 @app.route('/score',methods=['POST'])這條語句,這就是flask的路由函數(shù),沒錯,/score 正是小程序提交請求是url里的score路徑,所以這個路由對應(yīng)的函數(shù)正是處理請求的后臺程序。methods=['POST'] 說明這個路由只處理POST請求。
          in_acc_nbr = str(json.loads(request.values.get("acc_nbr"))),這段語句是獲取請求的數(shù)據(jù),首先request.values.get()函數(shù)是獲得request請求里最初的數(shù)據(jù)。"acc_nbr"是小程序data對象里的鍵,因為data里的數(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')) 這段語句是本文的核心。因為小程序接受數(shù)據(jù)需要json格式,所以我們的返回數(shù)據(jù)也需要轉(zhuǎn)換成json格式,使用flask自帶的json.dumps函數(shù)即可將字符類型的數(shù)據(jù)轉(zhuǎn)換成json格式的數(shù)據(jù)。
          后臺程序返回了數(shù)據(jù)后,第三步就是小程序該怎么接收返回數(shù)據(jù)并進(jìn)行相關(guān)業(yè)務(wù)邏輯處理。

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

    1. wx.request({
    2. url: 'https://我的后臺服務(wù)器網(wǎng)址/score',
    3. data: {
    4. acc_nbr:JSON.stringify(acc_nbr),
    5. grade1: JSON.stringify(grade1), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
    6. grade2: JSON.stringify(grade2), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
    7. grade3: JSON.stringify(grade3), //將數(shù)據(jù)格式轉(zhuǎn)為JSON
    8. txt1:JSON.stringify(txt1),
    9. txt2:JSON.stringify(txt2),
    10. txt3:JSON.stringify(txt3)
    11. },
    12. method: "POST",
    13. header: {
    14. 'content-type': 'application/x-www-form-urlencoded',
    15. 'chartset': 'utf-8'
    16. },
    17. success: function (res) {
    18. console.log(res.data);
    19. wx.showToast({
    20. title: res.data,//這里打印出登錄成功
    21. icon: 'success',
    22. duration: 1000
    23. });
    24. var acc_nbr = that.data.phoneNum;
    25. wx.redirectTo({
    26. url: '../graderesult/graderesult?phoneNum=' + acc_nbr
    27. })
    28. }
    29. })

    代碼詳解:單獨(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)⒋鎯Φ臄?shù)據(jù),即res.data,就是第二步后臺返回的數(shù)據(jù)??梢杂胏onsole.log(res.data)看下返回的數(shù)據(jù)是否正確。
    我的項目在拿到后臺返回的數(shù)據(jù),進(jìn)行了彈窗展示返回數(shù)據(jù)wx.showToast和頁面的跳轉(zhuǎn)wx.redirectTo,大家可以根據(jù)自己的業(yè)務(wù)需求在sucess回調(diào)函數(shù)編寫自己的業(yè)務(wù)邏輯
    。

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

     

    1. <script type="text/javascript">
    2. $(function () {
    3. $('.btn').click(function () {
    4. var $result = $('#result');
    5. var $result1=$('#result1');
    6. var $acc_nbr = $('input[name="acc_nbr"]').val();
    7. $.ajax({
    8. url: '/query',
    9. data: $('form').serialize(),
    10. type: 'POST',
    11. dataType: 'json',
    12. success: function (data) {
    13. if (data.length !=0){
    14. console.log(data.length);
    15. var str = "";
    16. var str1="<input value='"+data[0][8]+"'class='form-control' type='hidden' name='acct_id'>" +
    17. "<input value='"+Math.ceil(data[0][7]*1.5)+"'class=\"form-control\" type=\"text\" name='credit_amount' readonly >" +
    18. " <button type=\"submit\" class=\"btn btn-primary\">確認(rèn)</button>";
    19. for (s in data) {
    20. if (data[s][4] == '后付費(fèi)') {
    21. str = str + "<tr class=\"danger\">"
    22. + "<td>" + data[s][0] + "</td>"
    23. + "<td>" + data[s][1] + "</td>"
    24. + "<td>" + data[s][2] + "</td>"
    25. + "<td>" + data[s][3] + "</td>"
    26. + "<td>" + data[s][4] + "</td>"
    27. + "<td>" + data[s][5] + "</td>"
    28. + "<td>" + data[s][6] + "</td>"
    29. + "</tr>"
    30. }
    31. else {
    32. str = str + "<tr class=\"success\">"
    33. + "<td>" + data[s][0] + "</td>"
    34. + "<td>" + data[s][1] + "</td>"
    35. + "<td>" + data[s][2] + "</td>"
    36. + "<td>" + data[s][3] + "</td>"
    37. + "<td>" + data[s][4] + "</td>"
    38. + "<td>" + data[s][5] + "</td>"
    39. + "<td>" + data[s][6] + "</td>"
    40. + "</tr>"
    41. }
    42. };
    43. $result1.html(str1);
    44. $result.html(str);
    45. }
    46. else {
    47. alert('此號碼不在派單內(nèi)!!');
    48. }
    49. }
    50. }
    51. )
    52. });
    53. });
    54. </script>

     

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
小程序?qū)觩hp接口接收數(shù)據(jù)
JS的Form表單轉(zhuǎn)JSON格式
JSON 格式數(shù)據(jù)的定義及操作
【AI番外】今天說微信小程序開發(fā),不能上線的AI,都是紙老虎
Python Flask 開發(fā)網(wǎng)絡(luò)應(yīng)用指南00:創(chuàng)建你的 REST API
第一個flask web應(yīng)用程序、通過一個路由就能完成前后端數(shù)據(jù)交互的python web應(yīng)用框架
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服