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

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

时间: 2019-05-03

Python的Flask框架中实现简单的登录功能的教程

 回顾 在前面的系列章节中,我们创建了一个数据库并且学着用用户和邮件来填充,但是到现在我们还没能够植入到我们的程序中. 两章之前,我们已经看到怎么去创建网络表单并且留下了一个实现完全的登陆表单. 在这篇文章中,我们将基于我门所学的网络表单和数据库来构建并实现我们自己的用户登录系统.教程的最后我们小程序会实现新用户注册,登陆和退出的功能. 为了能跟上这章节,你需要前一章节最后部分,我们留下的微博程序.请确保你的程序已经正确安装和运行. 在前面的章节,我们开始配置我们将要用到的Flask扩展.为了登

Python的Flask框架的简介和安装方法

请在开始使用 Flask 之前阅读本文.也希望本文能够回答关于 Flask 项目的初衷以及目标,以及 flask 适用的场景(情境)等问题. 什么是 "微"? "微" ("Micro") 并不是意味着把整个 Web 应用放入到一个 Python 文件,尽管确实可以这么做.当然"微" ("Micro") 也不是意味 Flask 的功能上是不足的.微框架中的 "微" ("Micro

使用Python的Flask框架来搭建第一个Web应用程序

1.初始化 在这章,你将学到Flask应用程序的不同部分.同时,你将编写和运行你的第一个Flask web应用程序. 所有的Flask应用程序都必须创建一个 应用程序实例 .使用web服务器网关接口协议将所有从客户端接收的请求传递给这个对象处理.这个应用程序实例就是Flask类的一个对象,通常使用下面的方式创建: from flask import Flask app = Flask(__name__) Flask类构造函数唯一需要的参数就是应用程序的主模块或包.对于大多数应用程序,Python

详解Python的Flask框架中生成SECRET_KEY密钥的方法

引子 如果遇到了 Must provide secret_key to use csrf错误提醒,原因就是没有设置secret_key ,在代码中加上 app.config['SECRET_KEY']='xxx' SECRET_KEY最好不要写在代码中. 最好设置一个config.py文件,从中读取该内容 config.py CSRF_ENABLED = True SECRET_KEY = 'you-will-never-guess' app.py app.config.from_object(

Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程

我们在升级系统的时候,经常碰到需要更新服务器端数据结构等操作,之前的方式是通过手工编写alter sql脚本处理,经常会发现遗漏,导致程序发布到服务器上后无法正常使用. 现在我们可以使用Flask-Migrate插件来解决之,Flask-Migrate插件是基于Alembic,Alembic是由大名鼎鼎的SQLAlchemy作者开发数据迁移工具. 具体操作如下: 1. 安装Flask-Migrate插件 $ pip install Flask-Migrate 2. 修改Flask App部分的代

从源码解析Python的Flask框架中request对象的用法

from flask import request Flask 是一个人气非常高的Python Web框架,笔者也拿它写过一些大大小小的项目,Flask 有一个特性我非常的喜欢,就是无论在什么地方,如果你想要获取当前的request对象,只要 简单的: 从当前request获取内容: method: 起始行,元数据 host: 起始行,元数据 path: 起始行,元数据 environ: 其中的 SERVER_PROTOCOL 是起始行,元数据 headers: 头,元数据 data: body

在Python程序和Flask框架中使用SQLAlchemy的教程

ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程等等.毫无疑问,不搞懂这些,怎么都觉得变扭,说不定某天就跳进了坑里,叫天天不应,喊地地不答. ORM 的出现,让畏惧SQL的开发者,在坑里看见了爬出去的绳索,仿佛天空并不是那么黑暗,至少再暗,我们也有了眼睛.顾名思义,ORM 对象关系映射,简而言之,就是把数据库的一个个table(表),映射为编程语

Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程

使用Flask-SQLAlchemy管理数据库 Flask-SQLAlchemy是一个Flask扩展,它简化了在Flask应用程序中对SQLAlchemy的使用.SQLAlchemy是一个强大的关系数据库框架,支持一些数据库后端.提供高级的ORM和底层访问数据库的本地SQL功能. 和其他扩展一样,通过pip安装Flask-SQLAlchemy: (venv) $ pip install flask-sqlalchemy 在Flask-SQLAlchemy,数据库被指定为URL.表格列出三个最受欢

Python的Flask框架中的Jinja2模板引擎学习教程

Flask的模板功能是基于Jinja2模板引擎来实现的.模板文件存放在当前目前下的子目录templates(一定要使用这个名字)下. main.py 代码如下: from flask import Flask, render_template app = Flask(__name__) @app.route('/hello') @app.route('/hello/<name>') def hello(name=None): return render_template('hello.html

Python的Flask框架使用Redis做数据缓存的配置方法

Redis是一款依据BSD开源协议发行的高性能Key-Value存储系统.会把数据读入内存中提高存取效率.Redis性能极高能支持超过100K+每秒的读写频率,还支持通知key过期等等特性,所以及其适合做缓存. 下载安装 根据redis中文网使用wget下载压缩包 $ wget http://download.redis.io/releases/redis-3.0.5.tar.gz $ tar xzf redis-3.0.5.tar.gz $ cd redis-3.0.5 $ make 二进制文

Python使用Flask框架同时上传多个文件的方法

本文实例讲述了Python使用Flask框架同时上传多个文件的方法,分享给大家供大家参考.具体如下: 下面的演示代码带有详细的html页面和python代码 import os # We'll render HTML templates and access data sent by POST # using the request object from flask. Redirect and url_for # will be used to redirect the user once t

在Python的Flask框架中验证注册用户的Email的方法

本教程详细介绍在用户注册过程中如何去验证他们的email地址. 工作流程上来讲,在用户注册一个新账户后会寄送一个确认信.直到用户按指示完成了邮件中的"验证",否则他们的账户会一直处于"未验证"状态.这是大多数网络应用会采用的工作流程. 这当中很重要的一件事就是,未验证的用户有什么权限?或者说,对于你的应用,他们是有全部权限呢,还是被限制的权限呢,还是根本没有权限?对于本教程中的应用,未验证用户会在登录后进到一个页面,会提醒他们只有验证了账户才可以进入应用. 开始前说

Python基于Flask框架配置依赖包信息的项目迁移部署

一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚拟环境中配置依赖包信息不同.如果重新迁移到一个新的虚拟环境后,又重新来一个一个的配置依赖包,那将会很浪费时间. 下面介绍一个简单易用的技巧,也是我自己在书本上看到的,以防每次配置需要翻阅书籍的麻烦,所以单自写一篇文章作记录,方便自己以后查看,也希望给其他学习的同学有点帮助. 完成项目相关代码编写后,

Python使用flask框架操作sqlite3的两种方式

本文实例讲述了Python使用flask框架操作sqlite3的两种方式.分享给大家供大家参考,具体如下: 方式一:raw_sql import sqlite3 from flask import Flask, request, jsonify app = Flask(__name__) DATABASE_URI = ":memory:" # 创建表格.插入数据 @app.before_first_request def create_db(): # 连接 conn = sqlite3

python的flask框架难学吗

Flask框架难学吗?它和Django哪个更容易一些,这可能是学Python web开发的同学经常问的问题,下面来说一下flask框架. Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature. 为什么要从Flask开始学习web框架? 1.python语言的灵活性给予了Flask同样的特征: 2.无论是用户画像还是产品推荐,python相比其他语言都有极大的优势: 3.Flask轻便,容易上手,试错成本低. 所以,从搭建一个轻便的博客出发,既要容易

python使用Flask框架获取用户IP地址的方法

本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最基本的Flask使用方法. python代码如下: from flask import Flask, render_template, request # Initialize the Flask application app = Flask(__name__) # Default route,

python中Flask框架简单入门实例

本文实例讲述了python中Flask框架的简单用法.分享给大家供大家参考.具体如下: 使用Flask框架的简单入门范例代码,如果你正学习Flask框架,可以参考下面的启动代码,这段代码可以在网页上输出"hello world" import os # Using Flask since Python doesn't have built-in session management from flask import Flask, session app = Flask(__name_

Python使用Flask框架获取当前查询参数的方法

本文实例讲述了Python使用Flask框架获取当前查询参数的方法.分享给大家供大家参考.具体如下: 这段代码实现Python的Flask框架下获取当前查询参数,即QueryString中的所有参数 from flask import Flask, render_template, request # Initialize the Flask application app = Flask(__name__) # This is a catch all route, to catch any r

Python的Django框架实现数据库查询(不返回QuerySet的方法)

一.创建模型类: # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models class Course(models.Model): """课程表""" name = models.CharField(verbose_name='课程名称', max_length=255) description = models.Tex