微信小程序python flask_Python Flask 搭建微信小程序后台详解
前言:
近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择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=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回调函数。
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项目,供大家品鉴^_^~
$(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="" +
"" +
" 确认";
for (s in data) {
if (data[s][4] == '后付费') {
str = str + "
"
+ "
" + data[s][0] + ""
+ "
" + data[s][1] + ""
+ "
" + data[s][2] + ""
+ "
" + data[s][3] + ""
+ "
" + data[s][4] + ""
+ "
" + data[s][5] + ""
+ "
" + data[s][6] + ""
+ "
"
}
else {
str = str + "
"
+ "
" + data[s][0] + ""
+ "
" + data[s][1] + ""
+ "
" + data[s][2] + ""
+ "
" + data[s][3] + ""
+ "
" + data[s][4] + ""
+ "
" + data[s][5] + ""
+ "
" + data[s][6] + ""
+ "
"
}
};
$result1.html(str1);
$result.html(str);
}
else {
alert('此号码不在派单内!!');
}
}
}
)
});
});
以上所述是小编给大家介绍的Python Flask 搭建微信小程序后台详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
微信小程序python flask_Python Flask 搭建微信小程序后台详解相关推荐
- Python 21 Flask(二)上下文管理详解
上下文管理 对于上下文管理我没有找到明确的定义,但是经过源码流程的学习后,我觉得所谓的上下文管理应该就是Flask对请求和应用相关数据的一种处理方式,它不是像Django一样通过参数的传导,而是创建了 ...
- 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...
- (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好
转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...
- 2021-04-08 Python通过flask搭建音频流/文件服务
Python通过flask搭建音频流/文件服务 工作上需要搭建一个音频推送服务,考虑到使用python Flask搭建一个服务,下面给出简单的代码,代码中每次请求推送当前目录下的音频文件. from ...
- Python3 环境搭建、pycharm安装配置详解、新建Python项目(新手小白版Windows系统)
Python3 环境搭建 .pycharm安装配置详解 window系统上环境搭建: 一.环境搭建,下载Python (Python 3.8为例) 二.pycharm的下载与安装 window系统上环 ...
- python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解
本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...
- python函数定义及调用-python函数声明和调用定义及原理详解
这篇文章主要介绍了python函数声明和调用定义及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数是指代码片段,可以重复调用,比如我们前 ...
- python函数声明和调用定义及原理详解
这篇文章主要介绍了python函数声明和调用定义及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数是指代码片段,可以重复调用,比如我们前 ...
- python哪个关键字可以导入模块_关于python导入模块import与常见的模块详解
0.什么是python模块?干什么的用的? Java中如果使用abs()函数,则需要需要导入Math包,同样python也是封装的,因为python提供的函数太多,所以根据函数的功能将其封装在不同的m ...
最新文章
- 为什么项目经理很难有节操的选举
- MYSQL快速导入大量数据
- linux 内核设备管理模型sysfs(进阶篇)
- 凯撒密码加密算法python_Python最新暴力破解WiFi,攻破所有密码限制,最强破解!...
- QT每日一练day3:Qt的编译机制
- mysql把两个查询的结果合并为一个结果
- 《python接口自动化测试》笔记
- 通过Discuz!搭建一个主题社区
- 利用百度地图坐标拾取系统获取经纬度,并将其坐标转换保存成SHP文件
- HTML怎么引入字体包中的字体
- 史上最简单的教程——“21天”自学C语言
- java 渲染_Java字体渲染
- 【cvpr2022】ReSTR: Convolution-free Referring Image Segmentation Using Transformers
- ThreeJs 学习之旅(十六)—Physics(物理)
- m2无盘服务器,200台左右全网万兆台方案.doc
- 计算机dns怎么设置方法,电脑的dns怎么设置具体方法
- (翻译)用户难以阅读全大写文本的原因
- VIVADO使用——打开已有文件
- 小米测试面试经验20121105
- 编程语言的学习路线通论