官方文档很详细,建议有问题去官方文档找答案。
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))”