侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python Flask 搭建微信小程序后台详解

Python  /  管理员 发布于 7年前   177

前言:

近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序。因为是初次接触小程序,经过一番摸索和尝试,个人觉得的微信小程序与后台的交互有点像ajax,所以有ajax开发经验的同学开发小程序应该很容易上手,因为本文着重讲解后台程序的搭建,所以,微信小程序的前端开发将一笔带过,有兴趣学习小程序前端语言的同学可移步网易云课堂的一套快速入门课程《轻松玩转微信小程序》。

分三步讲解微信小程序与Python后台交互数据的全过程

小程序向后台服务器提交数据。微信小程序为数据提交开发了一个API,其实是一个js函数,详细介绍可参考官方API文档《微信小程序API文档》。下面贴下我开发的项目的数据提交js代码。

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代码。 

# coding=utf8import sysdefaultencoding = 'utf-8'if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding)from flask import Flask,render_template,request,jsonfrom 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回调函数。

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回调函数讲解。

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项目,供大家品鉴^_^~

<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 搭建微信小程序后台详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!


  • 上一条:
    python3利用Socket实现通信的方法示例
    下一条:
    Python玩转PDF的各种骚操作
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客