激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python Flask 搭建微信小程序后臺詳解

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

2021-06-23 00:39飄逸高鐵俠 Python

這篇文章主要介紹了Python Flask 搭建微信小程序后臺,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言:

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

分三步講解微信小程序與python后臺交互數據的全過程

小程序向后臺服務器提交數據。微信小程序為數據提交開發了一個api,其實是一個js函數,詳細介紹可參考官方api文檔《微信小程序api文檔》。下面貼下我開發的項目的數據提交js代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wx.request({
   url: 'https://我的后臺服務器網址/score',
   data: {
   acc_nbr:json.stringify(acc_nbr),
   grade1: json.stringify(grade1), //將數據格式轉為json
   grade2: json.stringify(grade2), //將數據格式轉為json
   grade3: json.stringify(grade3), //將數據格式轉為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'
   }

代碼參數講解:
url: 'https://我的后臺服務器地址/score',url參數是數據提交的地址,有點像html里表單提交里的action,微信小程序對后臺接入的服務器要求很高,需要具備已備案的能夠解析的https域名,我的服務器使用的阿里云,網站架構使用的是

nginx+supervisor+gunicorn+flask經典python_flask 部署架構,此架構的部署學習可移步我的云筆記flask部署。
data: data參數是要提交的數據,數據需要轉換成json格式,使用json的stringify函數,可以看到data的數據類型是javascript的對象類型,也就是俗稱的鍵值對。

methon:是數據提交的請求方式,默認是post請求方式,后臺在處理請求時會判斷請求方式。
header:是數據的頭文件,需要設置字符類型為utf-8,即'charset':'utf-8',防止傳輸中文數據時出現亂碼。

wx.requset()函數被調用后,會向后臺服務器發起數據的post請求,此時小程序會把data里的數據以post形式向url對應的服務器提交,下面講解第二部分也是本文重點,即后臺服務器接受到小程序的請求后,怎么處理并返回信息

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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數據庫ip地址',3306,'數據庫用戶名','數據庫密碼','數據庫','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='數據提交成功'
  return json.dumps(res.decode('utf8'))
 else:
  print res
  res='數據提交失敗'
  return json.dumps(res.decode('utf8'))
if __name__ == '__main__':
 app.run(debug=true)

 代碼詳解:

可以看到這是一段很基礎的flask的代碼。大家應該看到了 @app.route('/score',methods=['post'])這條語句,這就是flask的路由函數,沒錯,/score 正是小程序提交請求是url里的score路徑,所以這個路由對應的函數正是處理請求的后臺程序。methods=['post'] 說明這個路由只處理post請求。

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

將json數據轉換成字符數據后,就可以進行相關業務邏輯的處理,這里我的代碼是將相關數據提交到mysql數據庫里。

業務邏輯處理完畢后,需要向小程序返回消息和數據,return json.dumps(res.decode('utf8')) 這段語句是本文的核心。因為小程序接受數據需要json格式,所以我們的返回數據也需要轉換成json格式,使用flask自帶的json.dumps函數即可將字符類型的數據轉換成json格式的數據。

后臺程序返回了數據后,第三步就是小程序該怎么接收返回數據并進行相關業務邏輯處理。

小程序接收返回數據。python-flask向小程序返回了json格式的數據后,小程序的wx.requset()函數里的sucess回調函數用來處理返回數據。下面貼下項目中wx.requset()函數中sucess回調函數。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
wx.request({
   url: 'https://我的后臺服務器網址/score',
   data: {
   acc_nbr:json.stringify(acc_nbr),
   grade1: json.stringify(grade1), //將數據格式轉為json
   grade2: json.stringify(grade2), //將數據格式轉為json
   grade3: json.stringify(grade3), //將數據格式轉為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
   })
   }
  })

代碼詳解:單獨拿出sucess回調函數講解。

?
1
2
3
4
5
6
7
8
9
10
11
12
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入參存儲的數據,即res.data,就是第二步后臺返回的數據。可以用console.log(res.data)看下返回的數據是否正確。

我的項目在拿到后臺返回的數據,進行了彈窗展示返回數據wx.showtoast和頁面的跳轉wx.redirectto,大家可以根據自己的業務需求在sucess回調函數編寫自己的業務邏輯。

結尾:

至此,微信小程序和python后臺交互數據的步驟已經講完。正如文章開頭所講,學過ajax的同學讀完會發現微信小程序與后臺交互數據非常像ajax,所以,文章結尾貼出一個彩蛋,即神奇的ajax代碼,出自我的另一個web項目,供大家品鑒^_^~

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<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\">確認</button>";
 
      for (s in data) {
       if (data[s][4] == '后付費') {
        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('此號碼不在派單內!!');
      }
     }
 
    }
   )
  });
 });
 
</script>

以上所述是小編給大家介紹的python flask 搭建微信小程序后臺詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://blog.csdn.net/jsyzliuyu/article/details/81878336

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人综合在线观看 | 在线免费视频a | 中文字幕h | 亚洲国产精久久久久久久 | 欧美扩阴视频 | 亚洲热线99精品视频 | 欧美成人黄色片 | 国产免费一区二区三区最新不卡 | 九九热视频免费在线观看 | 午夜视频在线观看免费视频 | 欧美日韩1区2区 | 日韩精品中文字幕一区二区 | 一级毛片一区 | 国产一国产一级毛片视频 | 成人福利在线 | 国产手机av在线 | 成人在线免费视频观看 | 日韩午夜片| 亚洲人成在线播放 | 国产第一页精品 | 女人叉开腿让男人桶 | 久久久成人精品视频 | 日韩av片在线播放 | 日本黄色一级毛片 | 精品一区二区视频在线观看 | 18视频网站在线观看 | 男男羞羞视频网站国产 | 久久经典 | 久久艹艹艹 | 色妞色视频一区二区三区四区 | 麻豆视频在线免费观看 | 91最新视频在线观看 | 亚洲影视中文字幕 | 视屏一区 | 久久99亚洲精品久久99果 | 精品日韩欧美 | 日本在线播放一区二区 | 一级网站| 国产午夜亚洲精品理论片大丰影院 | 欧美国产一区二区三区激情无套 | 看片一区二区三区 |