微信小程序开发笔记

官方文档很详细,建议有问题去官方文档找答案。

var、let、const 区别

使用let更安全。
const定义的是常量。

修改了data中的数据,页面数据没刷新

修改data中的数据只是在逻辑层,而视图层并没有改变,调用setData函数可以将数据传到视图层并刷新页面。

this.setData({id: this.data.id})
工作原理

小程序的视图层目前使用 WebView 作为渲染载体,而逻辑层是由独立的 JavascriptCore 作为运行环境。在架构上,WebView 和 JavascriptCore 都是独立的模块,并不具备数据直接共享的通道。

request请求中使用this.data获取变量失败

在javascript中,this代表当前对象,会随着程序的执行过程中的上下文改变。调用wx.request方法时,在回调函数中,对象已经发生改变,所以需要在调用之前复制一份当前对象。

var _this = this;
wx.request({
    url: 'http://localhost:9090',
    success(res) {
      _this.setData({id: 1})
    }
  })

从服务器连续获取多张图片总会有一些请求失败

可能是由于连续的数据会无法分离,修改代码为没请求一张图片,在success回调中请求下一张图片。

如何访问app.js中的全局数据

App():用于注册小程序。App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果。
详见官方文档

// app.js
App({
  onLaunch (options) {
    // Do something initial when launch.
  },
  onShow (options) {
    // Do something when show.
  },
  onHide () {
    // Do something when hide.
  },
  onError (msg) {
    console.log(msg)
  },
  globalData: 'I am global data'
})

App()中定义的对象在别的页面可以通过getApp()方法获取。

const app = getApp()
console.log(app.globalData)

小程序本地服务器调试失败

本地服务器调试不需要在小程序后台配置服务器域名。如果调试失败,检查四处:
1、详情->本地设置->打钩“不校验合法域名”
2、IP地址使用localhost、127.0.0.1和局域网ip分别测试
(这里我觉得很坑,我电脑同时连接了有线网和无线网,我使用以太网ip访问服务器结果总是失败,调试了很久才发现使用无线局域网ip就没问题)
3、确保端口开放,关闭防火墙
4、真机调试,手机右上角打开调试

flask如何获取request请求参数

这里给个链接
获取post请求参数推荐用 request.json[‘a’]
获取get请求参数推荐用 request.args.get(‘a’)

小程序如何上传图片到服务器

小程序提供了接口uploadFile,详细参考官方文档

wx.uploadFile({
  url: 'http://127.0.0.1:7070'/uploadimg', 
  filePath: imgPath,
  name: 'imgfile',
  formData: {
    'log_id': parseInt(Math.random() * (10**16))
  },   
  fail(res){
    console.log("uploadFile fail")
  },
  success(res) {
    console.log("uploadFile success")
    console.log(JSON.parse(res.data))   // 用JSON.parse解析服务器返回的数据res.data
  }
})

图片太大导致无法保存到数据库

客户端压缩之后上传,服务器拿到图片之后resize再入库。
可以通过getImageInfo获取图片尺寸,通过getFileInfo获取图片大小。

// 压缩图片
wx.compressImage({
  src: imgPath, // 图片路径
  quality: 10,   // 压缩质量(0-100)
  success: function (res){
    imgPath = res.tempFilePath  // 压缩之后的图片路径
    console.log('compress image success', imgPath)
  },
  fail: function (){
    console.log('compressImage fail')
  }
})      
// 图片bit流数据resize
c_img = cv2.imdecode(np.fromstring(image_bytes, np.uint8), cv2.COLOR_RGB2BGR)  # Bytes转cv2
size = [i if i<400 else 400 for i in c_img.shape[:2]]
c_img = cv2.resize(c_img, tuple(size), interpolation=cv2.INTER_AREA)
image_bytes = cv2.imencode('.jpg', c_img)[1].tobytes()       # cv2转Bytes

关于resize所用的插值方法:
INTER_NEAREST :最近邻插值
INTER_LINEAR : 双线性插值(默认设置)
INTER_AREA : 使用像素区域关系进行重采样。
INTER_CUBIC : 4x4像素邻域的双三次插值
INTER_LANCZOS4 :8x8像素邻域的Lanczos插值
关于python PIL、opencv, 二进制、base64 四种图片格式转换,参考

salalchemy插入操作报错

外找不到对应的表
Foreign key associated with column ‘user.role_id’ could not find
我的错误:user表和record表一对多,向record插入记录的时候,没有关联user。

// 错误代码
record = Record(img=image_bytes, label=label, score=score,user_id=user_id)
sess.commit()

// 正确代码
try:
    record = Record(img=image_bytes, label=label, score=score)
    user = sess.query(User).filter(User.id == user_id).one()
    sess.commit()
    record.user = user
    sess.add(record)
    sess.commit()
except Exception as e:
    sess.rollback()

接收后端返回的二进制图片并渲染

var _this = this;
wx.request({
  url: 'http://localhost:7087/predictor/getimg',
  method: "GET",
  responseType: 'arraybuffer', 
  fail(res) {
    console.log("getimg fail")
  },
  success(res) {
    console.log("getimg success")
    //处理后端返回图片二进制流,渲染页面
    let url ='data:image/png;base64,' + wx.arrayBufferToBase64(res.data)
    _this.setData({imgpath: url})
  }
})

后台服务器报错

(pymysql.err.OperationalError) (2006, “MySQL server has gone away (ConnectionAbortedError(10053, ‘你的主机中的软件中止了一个已建立的连接。’, None, 10053, None))”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值