精华内容
下载资源
问答
  • 一个企业内部订餐的微信小程序,小程序端是模仿美团做的,后端用的Python的Django框架,后台管理采用的Django的admin。 GitHub地址如下 https://github.com/helongfistraiser/weixin ...

    一个企业内部订餐的微信小程序,小程序端是模仿美团做的,后端用的Python的Django框架,后台管理采用的Django的admin。

    GitHub地址如下

    https://github.com/helongfistraiser/weixin

    展开全文
  • 微信小程序商城的后台,可以对小程序端商城的物品进行管理,可以进行修改价格,添加商品等操作 健康码管理 绿码:代表一切正常 黄码:代表正实施7天内隔离 红码:代表正实施14天隔离 教务信息管理 通过Python从教务...
  • 微信小程序端: 重点在chooseImage函数中,根据图片路径获取到图片传递给flask的url; Page({ data: { SHOW_TOP: true, canRecordStart: false, }, data: { tempFilePaths:'', sourceType: ['camera', 'album'...

    需求:小程序端拍照调用python训练好的图片分类模型。实现图片分类识别的功能。
    微信小程序端:
    重点在chooseImage函数中,根据图片路径获取到图片传递给flask的url;

    Page({
        data: {
            SHOW_TOP: true,
            canRecordStart: false,
        },
        data: {
            tempFilePaths:'',
            sourceType: ['camera', 'album']
          },
        isSpeaking: false,
        accessToken: "",
        onLoad: function (options) {
            
            console.log("onLoad!");
            this.setHeader();
            var that=this
            wx.showShareMenu({
                withShareTicket: true //要求小程序返回分享目标信息
            });
            var isShowed = wx.getStorageSync("tip");
            if (isShowed != 1) {
                setTimeout(() => {
                    this.setData({
                        SHOW_TOP: false
                    })
                    wx.setStorageSync("tip", 1)
                }, 3 * 1000)
            } else {
                this.setData({
                    SHOW_TOP: false
                })
            };
            
        },
        },
    
    
        
     //头像点击处理事件,使用wx.showActionSheet()调用菜单栏
     buttonclick: function () {
        const that = this
        wx.showActionSheet({
          itemList: ['拍照', '相册'],
          itemColor: '',
          //成功时回调
          success: function (res) {
            if (!res.cancel) {
              /*
               res.tapIndex返回用户点击的按钮序号,从上到下的顺序,从0开始
               比如用户点击本例中的拍照就返回0,相册就返回1
               我们res.tapIndex的值传给chooseImage()
              */
              that.chooseImage(res.tapIndex)
            }
          },
          
    setHeader(){
        const tempFilePaths = wx.getStorageSync('tempFilePaths');
        if (tempFilePaths) {
          this.setData({
            tempFilePaths: tempFilePaths
          })
        } else {
          this.setData({
            tempFilePaths: '/images/camera.png'
          })
        }
      },
    
    
      chooseImage(tapIndex) {
        const checkeddata = true
        const that = this
        wx.chooseImage({
        //count表示一次可以选择多少照片
          count: 1,
          //sizeType所选的图片的尺寸,original原图,compressed压缩图
          sizeType: ['original', 'compressed'],
          //如果sourceType为camera则调用摄像头,为album时调用相册
          sourceType: [that.data.sourceType[tapIndex]],
          success(res) {
            // tempFilePath可以作为img标签的src属性显示图片
            console.log(res);
            const tempFilePaths = res.tempFilePaths
            //将选择到的图片缓存到本地storage中
            wx.setStorageSync('tempFilePaths', tempFilePaths)
            /*
    		由于在我们选择图片后图片只是保存到storage中,所以我们需要调用一次   	        setHeader()方法来使页面上的头像更新
    		*/
            that.setHeader();
            // wx.showToast({
            //   title: '设置成功',
            //   icon: 'none',
            // //   duration: 2000
            // })
            wx.showLoading({
                title: '识别中...',
            })
            
            var team_image = wx.getFileSystemManager().readFileSync(res.tempFilePaths[0], "base64")
            wx.request({
              url: 'http://127.0.0.1:5000/upload', //API地址,upload是我给路由起的名字,参照下面的python代码
                         method: "POST",
              header: {
                         'content-type': "application/x-www-form-urlencoded",
                        },
              data: {image: team_image},//将数据传给后端
         
            success: function (res) {
                console.log(res.data);  //控制台输出返回数据  
                wx.hideLoading()
                wx.showModal({
    
                    title: '识别结果', 
                    confirmText: "识别正确",
                    cancelText:"识别错误",
                    content: res.data, 
                    success: function(res) { 
                    if (res.confirm) {
                    console.log('识别正确')
                    } else if (res.cancel) {
                    console.log('重新识别')
                    }
                    
                    }
                    
                    })     
              }
    
            })
            
            
      
    
    
    
            
          }
        })
       
    
      },
    
    });
    
    
    
    

    flask端:
    将图片裁剪,填充,调用自己训练保存最优的模型,用softmax处理结果矩阵,最后得到预测种类

    # coding=utf-8
    from flask import Flask, render_template, request, jsonify
    from werkzeug.utils import secure_filename
    from datetime import timedelta
    from flask import Flask, render_template, request
    import torchvision.transforms as transforms
    from PIL import Image
    from torchvision import models
    import os
    import torch
    import json
    import numpy as np
    import torch.nn as nn
    import matplotlib.pyplot as plt
    import base64
    
    
    app = Flask(__name__)
    
    
    def softmax(x):
        exp_x = np.exp(x)
        softmax_x = exp_x / np.sum(exp_x, 0)
        return softmax_x
    
    
    with open('dir_label.txt', 'r', encoding='utf-8') as f:
        labels = f.readlines()
        print("oldlabels:",labels)
        labels = list(map(lambda x: x.strip().split('\t'), labels))
        print("newlabels:",labels)
    
    
    def padding_black(img):
        w, h = img.size
    
        scale = 224. / max(w, h)
        img_fg = img.resize([int(x) for x in [w * scale, h * scale]])
    
        size_fg = img_fg.size
        size_bg = 224
    
        img_bg = Image.new("RGB", (size_bg, size_bg))
    
        img_bg.paste(img_fg, ((size_bg - size_fg[0]) // 2,
                                  (size_bg - size_fg[1]) // 2))
    
        img = img_bg
        return img
    # 输出
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    # 设置允许的文件格式
    ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'bmp'])
    def allowed_file(filename):
        return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
    
    # 设置静态文件缓存过期时间
    app.send_file_max_age_default = timedelta(seconds=1)
    
    # 添加路由
    @app.route('/upload', methods=['POST', 'GET'])
    def upload():
        if request.method == 'POST':
            # 通过file标签获取文件
            team_image = base64.b64decode(request.form.get("image"))  # 队base64进行解码还原。
            with open("static/111111.jpg", "wb") as f:
                f.write(team_image)
            image = Image.open("static/111111.jpg")
            # image = Image.open('laji.jpg')
            image = image.convert('RGB')
            image = padding_black(image)
            transform1 = transforms.Compose([
                transforms.Resize(224),
                transforms.ToTensor(),
            ])
            image = transform1(image)
            image = image.unsqueeze(0)
            # image = torch.unsqueeze(image, dim=0).float()
            print(image.shape)
            model = models.resnet50(pretrained=False)
            fc_inputs = model.fc.in_features
            model.fc = nn.Linear(fc_inputs, 214)
            # model = model.cuda()
            # 加载训练好的模型
            checkpoint = torch.load('model_best_checkpoint_resnet50.pth.tar')
            model.load_state_dict(checkpoint['state_dict'])
            model.eval()
    
            src = image.numpy()
            src = src.reshape(3, 224, 224)
            src = np.transpose(src, (1, 2, 0))
            # image = image.cuda()
            # label = label.cuda()
            pred = model(image)
            pred = pred.data.cpu().numpy()[0]
    
            score = softmax(pred)
            pred_id = np.argmax(score)
    
            plt.imshow(src)
            print('预测结果:', labels[pred_id][0])
            # return labels[pred_id][0];
            return json.dumps(labels[pred_id][0], ensure_ascii=False)//将预测结果传回给前端
            # plt.show()
        #     return render_template('upload_ok.html')
        #     重新返回上传界面
        # return render_template('upload.html')
    
    
    if __name__ == '__main__':
        app.run(debug=False)
    

    大致的效果:
    在这里插入图片描述
    在这里插入图片描述
    但是在手机上测试的话,wx.request{}里的url的域名不规范,不能出现这种端口号,目前还在想解决办法,有知道的大佬还望告知。

    展开全文
  • 手上有个微信小程序项目,因为对Python相对熟悉一些,打算后端python写,具体采用python 轻量级的flask框架。在做的过程中,有些问题需要考虑,记录在下边.1. 开发的小程序后端怎么区分不同的小程序用户?或者说有...

    手上有个微信小程序项目,因为对Python相对熟悉一些,打算后端用python写,具体采用python 轻量级的flask框架。

    在做的过程中,有些问题需要考虑,记录在下边.

    1. 开发的小程序后端怎么区分不同的小程序用户?

    或者说有哪些属性可以唯一的标识一个用户呢?首先想到的是 微信号,手机号,微信号好像现在还没有API可以获取,手机号又比较麻烦还涉及到读取用户信息,进一步的做法是用openid, unionid, 比如让用户每次请求都带上openid, 然后在后台看是否有这个Openid 信息,这是一种方法,这样做相当于把openid 当做web开发里常用的session id 来使用了,区分用户的作用是起到了,但是用一个一成不变的openid 来识别用户是有安全风险的,万一泄露了别人也可以伪装成你来像后台发请求. 既然提到了session id, 那么更好的方案应该是在后台维护 自定义登录态的session[1] 和 openid 的Map表,前后端的用户唯一标识用session id,当识别到是一个的用户的 session 就根据map表找到openid, 再做进一步的操作.

    我的小程序在开始阶段就是用 openid放在payload里来识别用户. 有没有更更好的方案呢?应该上token机制,OAuth或者JWT走起,就更加安全了. 我最终选用的方案是 我的flask 学习笔记 里的第7条用到的token方案,简单好用!

    2. 小程序怎么同步调用?

    看到微信小程序的API 都是异步调用的,比如 app.onLauch 和 page.onLoad, 虽然app.onLauch 先与page.onLoad调用,但是很可能onLoad 执行完成以后onLauch才完成。但是有些时候我们再onLoad里又依赖于onLoad 执行的结果,这时候怎么做到同步调用呢?现在我还不知道,如果有大神有幸看到这里,多谢指点!好像有个callback 功能,还没有去试过

    3. page里可以根据变量自动跳转到其他界面吗?

    目前没有找到自动跳转的方法, 都是需要用户触发的,用户触发的操作可以是在wxml马上跳转 (如 ), 也可以是在js 里调用API跳转(如 wx.redirect)

    4. flask 是怎么处理并发的,应用程序需要考虑多进程多线程问题吗?

    flask 的app.run()有两个参数threaded和processes可以控制多线程和多进程,默认threaded=False, process=1, 也就是默认不支持多线程和多进程. 下面源码可以看出也不能同时支持多线程和多进程

    def make_server(host=None, port=None, app=None, threaded=False, processes=1,

    request_handler=None, passthrough_errors=False,

    ssl_context=None, fd=None):"""Create a new server instance that is either threaded, or forks

    or just processes one request after another."""

    if threaded and processes > 1:raise ValueError("cannot have a multithreaded and"

    "multi process server.")elifthreaded:returnThreadedWSGIServer(host, port, app, request_handler,

    passthrough_errors, ssl_context, fd=fd)elif processes > 1:returnForkingWSGIServer(host, port, app, processes, request_handler,

    passthrough_errors, ssl_context, fd=fd)else:returnBaseWSGIServer(host, port, app, request_handler,

    passthrough_errors, ssl_context, fd=fd)

    BaseWSGIServer 这个类是使用IO 多路复用的, 关于IO多路复用,可以参考我另一个篇文章 什么是IO多路复用

    Ref:

    Ref:

    展开全文
  • 前言 由于参加比赛的需要,用到了微信小程序做语音识别,过程中遇到了很多坑,这里记录下。后端使用的Python的flask框架,调用了百度语音识别api。

    前言

    由于参加比赛的需要,用到了微信小程序做语音识别,过程中遇到了很多坑,这里记录下。后端使用的Python的flask框架,调用了百度语音识别api。

    展开全文
  • 微信小程序安装 因为作者操作系统是Ubuntu16.04 所以在安装小程序开发平台时也踩了不少坑 首先 下载项目和初始化 git clone https://github.com/cytle/wechat_web_devtools.git 下载的文件大小大概800多mb 所以我为...
  • 微信小程序 后端用Flask实现

    千次阅读 2018-08-14 17:06:00
    手上有个微信小程序项目,因为对Python相对熟悉一些,打算后端python写,具体采用python 轻量级的flask框架。 在做的过程中,有些问题需要考虑,记录在下边. 1. 开发的小程序后端怎么区分不同的小程序用户? ...
  • 只不过可以作为后端接口为微信小程序提供数据服务而已。那么在本篇,我们就将结合微信小程序开发与 Python Web 开发,来完成一个朋友圈神器微信小程序的开发,这个微信小程序作为一个工具型的应用,供用户输入姓名或...
  • 1、在python中,Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数。这个参数就是django视图函数的第一个参数,通常写成request...
  • 创意配图:微信小程序开发环境 {关注后私信小编 PDF领取十套电子文档书籍}win10python 2.7.13 (64位)Flask (0.12.2)线上环境CentOS 6.5python 2.7.13 (64位)Flask (0.12.2)一: 编写后端程序查看统一下单接口,这里有...
  • 环境部署 一般会不用root账号部署生产环境,root账号权限最高,被入侵很麻烦 ... 创建python虚拟环境 生产环境配置 单进程启动服务 输出 export ops_config=production python manage.py runserver ...
  • # 小程序ID SECRET = "" MCHID = "" # 商户号 KEY = "" NOTIFY_URL = "" # 统一下单后微信回调地址,api demo见notify_view_demo.py # 证书路径 '...
  • 微信小程序中,前端不可以直接获取用户手机号明文,需要后端配合密码解析。 解析手机号需要 encryptedData :加密后的数据,前端直接获取 iv加密向量:前端直接获取 sessionkey:在使用code获取openid时取得 ...
  • 有时候很久没发朋友圈了突然手痒痒,又不知道发什么好,突然想到自己手头上有个毒鸡汤和励志鸡汤的数据库,大概两万多条,想着无事就把它做成一个小程序,以后想看什么就去里面看看,有励志也有搞笑的。
  • 小程序后端主要是提供 API 接口供小程序消费。主要的数据来源是 Official GitHub REST API v3 Github trending API by huchenme 后端对数据进行聚合,处理再返回给前端 python 实话说,选择 pyth...
  • 如何使用 Python 开发微信小程序

    万次阅读 多人点赞 2019-04-17 08:39:00
    在知乎上,有人提问“如何使用Python开发微信小程序”。其实微信小程序作为一个前端的机制,Python并不能插上边。只不过可以作为后端接口为微信小程序提供数据服务...
  • 前端是微信小程序后端Python,数据交互过程中,使用国密sm2加密。 微信小程序的开发文档中,有提供sm-crypto进行sm2加解密的工具文档见: ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服务可以使用任何你说熟知的开发语言,如 PHP 、 NodeJs 、 Java 、 C# 、 Python 等,因而,微信小程序的开发文档主要是围绕 WXML 、 WXSS 等...
  • python后端的支付宝小程序用户认证问题(alipay-sdk-python...借着蚂蚁金服小程序大赛开通了支付宝小程序个人开发者,尝试将一个微信小程序的项目移植到支付宝上,支付宝对于用户唯一id的获取比微信要复杂很多,微信...
  • 我想做一个微信小程序,然后后端是一个Python写的网站爬虫,用来爬一些牌子的商品上新数据,小程序就用来获取和显示爬到的数据,但是不想一直带着电脑,所以想把爬虫做成一个微信小程序放到手机上。 自己目前还是...
  • Python 实现微信小程序的用户登录 小程序可以通过官方提供的登录邓丽来获取用户身份的标示, 具体文档可以参考 官方文档, 通过流程时序可以看到, 对于需要和前端配合的服务端开发, 主要实现的就是通过小程序提供的 ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 132
精华内容 52
关键字:

微信小程序python后端

python 订阅
微信小程序 订阅