当前位置: 首页 > news >正文

Flask 与微信小程序对接

Flask微信小程序对接

在 web/controllers/api中增建py文件,主要是给微信小程序使用的。

web/controllers/init.py

# -*- coding: utf-8 -*-
from flask import Blueprint
route_api = Blueprint( 'api_page',__name__ )@route_api.route("/")
def index():return "Mina Api V1.0~~"

www.py

from web.controllers.api import route_api

如图所示api已经做好了

微信小程序mina

小程序简介 | 微信开放文档

mina/pages/index

mina/pages/index   /index.wxml

wxml中 屏蔽注释用 <!--       --!>

<!--start.wxml-->
<view class="container"><view class="remind-box" wx:if="{{remind}}"><image class="remind-img" src="/images/more/loading.gif"></image></view><block wx:else><image class="title" src="/images/more/title8.png"></image><view class="content"><view class="hd" style="transform:rotateZ({{angle}}deg);"><image class="logo" src="/images/more/logo.png"></image><image class="wave" src="/images/more/wave.png" mode="aspectFill"></image><image class="wave wave-bg" src="/images/more/wave.png" mode="aspectFill"></image></view><view class="bd"><image class="smalltitle" src="/images/more/confirm-word1.png"></image><view class="confirm-btn" bindtap='goToIndex'><text >走吧,订餐去</text></view><text class="copyright">@编程浪子 54php.cn</text></view></view></block>
</view>

第一步: 设置小程序用户信息

wx.getUserInfo(Object object) | 微信开放文档    用户信息

这段代码中,使用了条件语句wx:if="{{canIUse}}"来判断是否支持该API。

如果支持      则显示一个按钮用于授权登录,点击按钮会触发bindgetuserinfo事件,可以在事件处理函数bindGetUserInfo中获取用户信息

如果不支持   该API,则显示一条提示信息,请用户升级微信版本。


我们这里使用class="confirm-btn", 并去掉wx:if"{{canIUse}}"

<!--start.wxml-->
<view class="container"><view class="remind-box" wx:if="{{remind}}"><image class="remind-img" src="/images/more/loading.gif"></image></view><block wx:else><image class="title" src="/images/more/title8.png"></image><view class="content"><view class="hd" style="transform:rotateZ({{angle}}deg);"><image class="logo" src="/images/more/logo.png"></image><image class="wave" src="/images/more/wave.png" mode="aspectFill"></image><image class="wave wave-bg" src="/images/more/wave.png" mode="aspectFill"></image></view><view class="bd"><image class="smalltitle" src="/images/more/confirm-word1.png"></image>
<!--        <view class="confirm-btn" bindtap='goToIndex'>-->
<!--          <text >走吧,订餐去</text>-->
<!--        </view>--><button class="confirm-btn" open-type="getUserInfo" bindgetuserinfo="login">授权登录</button><text class="copyright">@编程浪子 54php.cn</text></view></view></block></view>
问题1: 为什么wx:if 可以去掉?  wx:if的作用是什么呢?

没有使用<wx:if="{{canIUse}}">的原因是因为在data中没有定义canIUse这个属性。在data中定义了remind属性,用于控制是否显示加载中的提示框。因此,在wxml中使用了wx:if="{{remind}}"来判断是否显示加载中的提示框。

代码中,确实没有使用<wx:if="{{canIUse}}">

wx:if是一个条件渲染的指令,用于根据条件来决定是否渲染某个组件或元素。

canIUse是一个变量,用于存储一个布尔值,根据这个布尔值来决定是否渲染<wx:if>所在的组件或元素。

wx:if的作用是根据条件来动态渲染页面的不同部分。

        当条件为真时,渲染该组件或元素;

        当条件为假时,不渲染该组件或元素。

        这样可以根据不同的条件来显示不同的内容,提高页面的灵活性和交互性。

在给出的代码中,没有使用<wx:if="{{canIUse}}">,可能是因为canIUse变量的值在该代码段中没有被定义或赋值。所以,该代码段中没有使用<wx:if="{{canIUse}}">

其实上面代码已经使用wx:if="{{remind}}"做了相关判断。


按钮更改后展示图

问题2: open-type 有什么作用?

微信小程序中的open-type是一个属性用于定义按钮的点击行为。根据提供的引用内容,有两种常见的open-type值可以使用。

  1. contact:该值用于直接打开客服对话功能。要使用此功能,需要在微信小程序的后台进行配置,并且只能通过真机调试来打开。具体的配置和使用方法可以参考微信小程序开发文档。

  2. launchApp:该值用于在小程序中直接打开其他应用程序。通过设置launchApp的open-type,可以实现在小程序中点击按钮后直接打开指定的应用程序。更多详细信息可以参考微信小程序开发文档中的相关章节。

请注意,open-type属性的具体使用方式和效果可能会因微信小程序的版本和配置而有所不同。建议在开发过程中参考官方文档并进行测试

这里使用了open-type="getUserInfo" 来定义这样一个属性,来获取用户信息

问题3: bindgetuserinfo="" 也是一个属性吗?这个属性起到什么作用?

在微信小程序中,bindgetuserinfo是一个用于   获取用户信息的事件  绑定  属性

当用户点击 授权按钮 并允许小程序获取用户信息时,该事件会被触发,并将 用户信息  作为  参数  传递给  绑定的   事件处理函数

下面是一个示例代码,演示了如何在微信小程序中使用bindgetuserinfo属性:

<!-- index.wxml -->
<view class="container"><button bindgetuserinfo="getUserInfo">获取用户信息</button>
</view>
// index.js
Page({getUserInfo: function(e) {console.log(e.detail.userInfo);// 在这里可以对用户信息进行处理}
})

在上述示例中,当用户点击"获取用户信息"按钮时,会触发getUserInfo函数,并将用户信息传递给该函数的参数e。你可以在该函数中对用户信息进行处理,比如打印到控制台或者发送到服务器。


这里使用bindgetuserinfo="login",当用户点击这个授权登录按钮时,绑定login()方法


mina/pages/index    /index.js

//login.js
//获取应用实例
var app = getApp();
Page({data: {remind: '加载中',angle: 0,userInfo: {}},goToIndex:function(){wx.switchTab({url: '/pages/food/index',});},onLoad:function(){wx.setNavigationBarTitle({title: app.globalData.shopName})},onShow:function(){},onReady: function(){var that = this;setTimeout(function(){that.setData({remind: ''});}, 1000);wx.onAccelerometerChange(function(res) {var angle = -(res.x*30).toFixed(1);if(angle>14){ angle=14; }else if(angle<-14){ angle=-14; }if(that.data.angle !== angle){that.setData({angle: angle});}});},login:function(e){var that = this;if (!e.detail.userInfo){app.alert({ "content": "登陆失败,请在此点击~~"});return;}var data = e.detail.userInfo;wx.login({success:function(res){if (!res.code){app.alert({"content":"登陆失败,请再次点击~~"});return;}data['code'] = res.code;wx.request({url:qpp.buildUrl('/member/login'),header:app.getRequestHeader(),method:'POST',data:data,success:function(res){if(res.data.code != 200){app.alert({'content':res.data.msg });return;}app.setCache("token", res.data.data.token);that.goToIndex();}});}});}});
});

问题1: getApp() 是什么意思?

var app = getApp();:定义一个变量app,并将其赋值为getApp(),即获取小程序的实例。

AppObject getApp(Object object) | 微信开放文档

var app = getApp(); 是小程序中获取全局app对象的一种常见方式。通过这行代码,我们可以在页面中使用app对象中定义的全局数据和方法。

在小程序中,每个页面都有自己的js文件,而app.js是小程序的入口文件,它是全局的,可以在整个小程序中共享数据和方法。通过在页面中使用var app = getApp();我们可以获取到app.js中定义的全局app对象。

这个全局app对象中通常包含了一些全局的数据和方法,比如全局的用户信息、全局的网络请求方法等。通过获取app对象,我们可以在页面中直接使用这些全局数据和方法,而不需要重复定义或传递数据。

下面是一个示例,展示了如何使用var app = getApp();获取app对象并使用其中的全局数据和方法:

// app.js
App({globalData: {userInfo: null,apiUrl: 'https://api.example.com'},getUserInfo: function() {// 获取用户信息的方法}
})// page.js
var app = getApp();
console.log(app.globalData.userInfo); // 输出全局的用户信息
app.getUserInfo(); // 调用全局的获取用户信息的方法

通过上述代码,我们可以看到,在page.js中使用var app = getApp();获取到了app对象,并可以通过app.globalData访问全局的数据,通过app.getUserInfo()调用全局的方法。


该段代码是一个小程序的登录页面的代码。下面是各部分的作用:

  1. //获取应用实例:注释,说明下面的代码是获取小程序的实例。

  2. Page({ ... }):定义一个页面对象,包含了页面的  数据、事件处理函数和生命周期函数等。

  3. data: { ... }:定义页面的数据,包括remindangleuserInfo等。

  4. goToIndex: function() { ... }:定义了一个名为goToIndex的事件处理函数,用于跳转到首页。

  5. onLoad: function() { ... }:定义了一个名为onLoad的生命周期函数,在页面加载时执行,设置导航栏标题为全局变量app.globalData.shopName的值。

问题2: wx.switchTab({})函数起到了什么作用?

wx.switchTab(Object object) | 微信开放文档   跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

在小程序中,可以使用wx.switchTab()函数来实现页面跳转到指定的tab页。

这段代码将会跳转到名为index的tab页,该tab页的路径为/pages/food/index

问题3: wx.setNavigationBarTitle({title: app.globalData.shopName})是什么函数?

这段代码是用于设置小程序页面的导航栏标题。 

wx.setNavigationBarTitle(Object object) | 微信开放文档  动态设置当前页面的标题

具体来说,它使用了wx.setNavigationBarTitle()函数,并传入一个对象作为参数。该对象包含一个title属性,其值为app.globalData.shopName

app.globalData.shopName是一个全局变量,用于存储商店的名称。通过将该变量的值赋给title属性,wx.setNavigationBarTitle()函数就可以将商店名称作为页面的导航栏标题进行显示。

需要注意的是,该代码需要在小程序的页面中使用,并且前提是在全局中定义了app对象,并且该对象中包含了globalData属性和shopName属性。


这里是调动了mina/app.js文件里的app里的globalData里的shopName  即“python3 + Flask 订餐全站系统”   作为 动态设置当前页面的标题的值。


问题3.1: shopName 是什么?

小程序商品推广 | 微信开放文档  

获取小程序商品推广素材

接口说明

通过该接口获取商品的推广素材,包括店铺appID、商品详情页Path、推广文案及推广短链、商品图片等

这里用的是已经封装好的js方法

login ...

该段代码是一个登录函数,用于处理用户登录的逻辑。具体介绍如下:

  1. 首先,函数接收一个事件对象e作为参数。
  2. 在函数内部,通过判断事件对象e中的用户信息是否存在来确定用户是否登录成功。如果用户信息不存在,则会弹出一个提示框提示登录失败,并返回。
  3. 如果用户信息存在,将用户信息赋值给变量data。
  4. 接着,调用wx.login()函数进行微信登录,获取登录凭证code。
  5. 如果登录凭证code不存在,则会弹出一个提示框提示登录失败,并返回。
  6. 如果登录凭证code存在,将code添加到data中。
  7. 然后,通过wx.request()函数向服务器发送登录请求,请求的URL为’/member/login’,请求头部包含app.getRequestHeader()返回的请求头信息,请求方法为POST,请求数据为data。
  8. 如果服务器返回的状态码不等于200,则会弹出一个提示框显示返回的错误信息,并返回。
  9. 如果服务器返回的状态码等于200,则将返回的token存储到缓存中,键名为"token",键值为res.data.data.token。
  10. 最后,调用goToIndex()函数进行页面跳转。
问题4: 概述一下setTimeout({})起到的功能?

number setTimeout(function callback, number delay, any rest) | 微信开放文档 设定一个定时器。在定时到期以后执行注册的回调函数

这段代码的作用是在1000毫秒(即1秒)后执行一个函数,将remind属性设置为空字符串。这通常用于在一定时间后执行某个操作,例如延迟显示或隐藏某个元素。

问题5: wx.onAccelerometerChange()代码有什么作用? 

根据提供的引用内容,这段代码是用于监听微信小程序的加速度计变化,并根据变化的角度来更新页面的数据。具体来说,代码中使用了wx.onAccelerometerChange函数来监听加速度计的变化,当加速度计的x轴变化时,会计算出对应的角度,并将角度更新到页面的angle数据中。

这段代码中,res.x表示加速度计在x轴上的变化值,乘以30后取负数,得到的就是角度值。然后通过判断角度是否超过了限制范围(-14到14之间),如果超过了,则将角度限制在这个范围内。最后,通过setData函数将更新后的角度值存储到页面的angle数据中,从而实现页面的更新。

toFixed(1)是一个用于保留小数位数的方法。它可以将一个数字四舍五入到指定的小数位数,并返回一个字符串表示该数字。

问题6:e.detail.userInfo的值是什么?

wx.getUserInfo(Object object) | 微信开放文档

e.detail.userInfo是一个对象,包含用户的详细信息,例如用户的昵称、头像、性别等。在这个例子中,e.detail.userInfo是通过微信小程序的getUserInfo接口获取的用户信息。


mina/app.js

//app.js
App({onLaunch: function () {},globalData: {userInfo: null,version: "1.0",shopName: "Python3 + Flask 订餐全栈系统",domain:"http://192.168.0.119:8999/api"},tip:function( params ){var that = this;var title = params.hasOwnProperty('title')?params['title']:'提示信息';var content = params.hasOwnProperty('content')?params['content']:'';wx.showModal({title: title,content: content,success: function(res) {if ( res.confirm ) {//点击确定if( params.hasOwnProperty('cb_confirm') && typeof( params.cb_confirm ) == "function" ){params.cb_confirm();}}else{//点击否if( params.hasOwnProperty('cb_cancel') && typeof( params.cb_cancel ) == "function" ){params.cb_cancel();}}}})},alert:function( params ){var title = params.hasOwnProperty('title')?params['title']:'提示信息';var content = params.hasOwnProperty('content')?params['content']:'';wx.showModal({title: title,content: content,showCancel:false,success: function(res) {if (res.confirm) {//用户点击确定if( params.hasOwnProperty('cb_confirm') && typeof( params.cb_confirm ) == "function" ){params.cb_confirm();}}else{if( params.hasOwnProperty('cb_cancel') && typeof( params.cb_cancel ) == "function" ){params.cb_cancel();}}}})},console:function( msg ){console.log( msg);},getRequestHeader:function(){return {'content-type': 'application/x-www-form-urlencoded'}}
});


App(Object object) | 微信开放文档    

注册小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。

App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果。

  1. onShow: function() { ... }:定义了一个名为onShow的生命周期函数,在页面显示时执行。

  2. onReady: function() { ... }:定义了一个名为onReady的生命周期函数,在页面初次渲染完成时执行。

  3. setTimeout(function() { ... }, 1000);:使用setTimeout函数设置一个定时器,延迟1秒后执行回调函数,将remind的值设为空字符串,即隐藏加载中的提示。

  4. wx.onAccelerometerChange(function(res) { ... }):监听加速度计数据变化的事件,当加速度计数据变化时执行回调函数。


问题@1: var title = params.hasOwnProperty('title')?params['title']:'提示信息'; 该段代码是什么意思?各部分元素的作用是什么? @代表对app.js文件内的提问

这段代码是一个条件表达式,用于  判断对象params中是否存在属性’title’。

 如果存在,则将该属性的值赋给变量title;

 如果不存在,则将字符串’提示信息’赋给变量title。

var title = params.hasOwnProperty('title') ? params['title'] : '提示信息';
  • params.hasOwnProperty('title'):这是一个判断对象params是否有属性’title’的方法。如果params对象中存在名为’title’的属性,则返回true;否则返回false。
  • ?:这是一个条件运算符,也称为三元运算符。它的作用是根据条件的真假来选择不同的值。
  • params['title']:如果params对象中存在名为’title’的属性,则返回该属性的值。
  • ::这是条件运算符的分隔符,用于分隔条件为真和条件为假时的两个值。
  • '提示信息':如果params对象中不存在名为’title’的属性,则返回字符串’提示信息’。

因此,这段代码的作用是判断对象params中是否存在属性’title’,如果存在则将其值赋给变量title,如果不存在则将字符串’提示信息’赋给变量title。


问题@2: wx.showModal({})是什么方法?
   wx.showModal({title: title,content: content,success: function(res) {if ( res.confirm ) {//点击确定if( params.hasOwnProperty('cb_confirm') && typeof( params.cb_confirm ) == "function" ){params.cb_confirm();}}else{//点击否if( params.hasOwnProperty('cb_cancel') && typeof( params.cb_cancel ) == "function" ){params.cb_cancel();}}}})},

该段代码是一个使用  小程序框架  中的  wx.showModal方法  创建模态弹窗 的示例。

wx.showModal(Object object) | 微信开放文档   显示模态对话框

模态弹窗 是一种可以  阻止  用户继续操作的弹窗,需要用户进行  确认 或 取消   操作后才能关闭。

代码中的wx.showModal方法接受一个  对象  作为参数,该对象包含以下属性:

  • title:弹窗的标题。
  • content:弹窗的内容。
  • success:弹窗操作成功后的回调函数。

在回调函数中,可以根据用户的操作结果进行相应的处理。

如果用户点击了确定按钮,会执行success函数中的逻辑,

如果用户点击了  取消按钮,会执行else语句中的逻辑。

在该示例中,代码通过判断res.confirm的值来确定用户点击的是确定按钮还是取消按钮。

如果res.confirm为true,表示用户点击了确定按钮,会执行cb_confirm函数;

如果res.confirm为false,表示用户点击了取消按钮,会执行cb_cancel函数。

该段代码的作用是创建一个模态弹窗,并根据用户的操作结果执行相应的回调函数。

问题@3: &&是什么?它的作用是什么?

在给定的代码中,&&是逻辑与运算符。它用于判断两个条件是否同时为真。如果两个条件都为真,则整个表达式的结果为真;否则,结果为假。

在给定的代码中,&&用于判断两个条件:

  1. params.hasOwnProperty('cb_confirm'):判断params对象是否具有名为cb_confirm的属性。
  2. typeof( params.cb_confirm ) == "function":判断params.cb_confirm的类型是否为函数。

只有当这两个条件都为真时,才会执行params.cb_confirm()函数。



相关文章:

Flask 与微信小程序对接

Flask 与微信小程序的对接 在 web/controllers/api中增建py文件&#xff0c;主要是给微信小程序使用的。 web/controllers/init.py # -*- coding: utf-8 -*- from flask import Blueprint route_api Blueprint( api_page,__name__ )route_api.route("/") def ind…...

node.js express框架开发入门教程

文章目录 前言一、Express 生成器&#xff08;express-generator&#xff09;二、快速安装1.express框架express-generator生成器安装2.使用pug视图引擎创建项目,projectName 为项目名称自定义 三、安装热更新插件 nodemon四、目录结构1. public文件夹2.routes路由其他请求方式…...

Spring系列学习二、Spring框架的环境配置

Spring框架的环境配置 一、Java环境配置二、 Spring框架的安装与配置三、Maven与Gradle环境的配置四、IDE环境配置&#xff08;Eclipse与IntelliJ IDEA&#xff09;五、结语 一、Java环境配置 所有编程旅程总是得从基础开始&#xff0c;如同乐高积木大作的基座&#xff0c;首先…...

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

OCR的文本框box及JSON数据保存 需求说明 一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 解决方法 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出…...

ubuntu 安装docker GPG error缺少公钥解决方法

文章目录 报错信息解决方案 报错信息 W: GPG error: http://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8 E: The repository ‘http:…...

Laravel的知识点

1.{{ }} 是在 HTML 中内嵌 PHP 的 Blade 语法标识符&#xff0c;表示包含在该区块内的代码都将使用 PHP 来编译运行。 2.两种写法 3.return void 在这段注释中&#xff0c;"return void" 表示该函数或方法没有返回值。这意味着它执行某些操作或任务&#xff0c;但…...

STM32 基础知识(探索者开发板)--103讲 通用定时器

定时器溢出时间计算方法: Tout ((arr 1) * (psc 1)) / Ft us arr:自动重装载值 psc:时钟预分频数 定时器相关实验通用步骤 1.定时器初始化 a.定义结构体句柄 b.设基地址 c.设分频系数 d.设自动重装载值 e. 设计数模式 f.初始化定时器 2.外设模式配置 a.设置模式 d.映…...

mysqld_exporter使用

下载自己解压好 https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz在需要监控的数据库上执行 CREATE USER monit_test* IDENTIFIED BY Sfn4ZCHsK WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATI…...

Java 解决远程调用 ssl 证书认证问题

Java 解决远程调用 ssl 证书认证问题 方法 1方法 2方法 3 方法 1 在 jdk 目录导入证书。 首先要下载 服务器 ssl 证书&#xff0c;下载完成之后。把它命名成 Root.cer 后面使用 cmd 命令行 在 jdk 目录导入。 例如 &#xff1a; jdk 的目录为&#xff1a;D:\JetBranins\Intel…...

kubernetes(k8s) Yaml 文件详解

YAML格式&#xff1a;用于配置和管理&#xff0c;YAML是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读。 1、查看API 资源版本标签 kubectl api-versions 2、编写资源配置清单 kubectl create -f nginx-test.yaml --validatefalse 2.3 查看创建的po…...

手拉手后端Springboot整合JWT

环境介绍 技术栈 springbootmybatis-plusmysqljava-jwt 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 Json Web令牌简称JWT Token是在服务端产生的一串字符串是客户端访问资源接口(AP)时所需要的资源凭证。…...

小狐狸GPT付费2.4.9 去除授权弹窗版

后台安装步骤&#xff1a; 1、在宝塔新建个站点&#xff0c;php版本使用7.2 、 7.3 或 7.4&#xff0c;把压缩包上传到站点根目录&#xff0c;运行目录设置为/public 2、导入数据库文件&#xff0c;数据库文件是 /db.sql 3、修改数据库连接配置&#xff0c;配置文件是/.env 4、…...

Scrapy爬虫中合理使用time.sleep和Request

概述 在Scrapy爬虫中&#xff0c;我们需要深入分析time.sleep和Request对象对并发请求的影响。time.sleep函数用于在发起请求之前等待一段时间&#xff0c;而Request对象用于发送HTTP请求。我们必须仔细考虑这些操作对其他并发请求的潜在影响&#xff0c;以及在异步情况下可能…...

在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo

Spring Cloud系列断更了有一段时间了&#xff0c;这段时间最近都在忙着项目上的事&#xff0c;天天修复bug以及调整需求&#xff0c;反正各种操劳&#xff0c;了解业务需求&#xff0c;然后开发相关功能&#xff0c;很久都没碰Spring Cloud系列的相关文章了&#xff0c;最近回头…...

mysql-5.6.16的内存泄漏问题

一、背景 有一台物理机上一个版本为5.6.16的从库出现了内存的增高&#xff0c;观测其日志可以发现&#xff0c;这台数据库已经oom很多次了&#xff0c;并且stop slave的时候会卡住非常长的时间才能停止 二、根本原因 上述的现象可以看到是一个明显的内存泄漏现象&#xff0c…...

相机内参标定理论篇------相机模型选择

相机种类&#xff1a; 当拿到一款需要标定内参的相机时&#xff0c;第一个问题就是选择那种的相机模型。工程上相机类型的划分并不是十分严格&#xff0c;一般来说根据相机FOV可以把相机大概分为以下几类&#xff1a; 长焦相机&#xff1a;< 标准相机&#xff1a;~&…...

java设计模式学习之【状态模式】

文章目录 引言状态模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用状态示例代码地址 引言 设想你正在使用一个在线视频播放器观看电影。随着你的互动&#xff0c;播放器可能处于不同的状态&#xff1a;播放、暂停、缓冲或结束。每个状态下&#xff0c;播放…...

使用aspose.Words更新表格列宽

public static bool UpdateTableStyle(string filePath) { try { Document doc new Document(); //样式 Style style doc.Styles.Add(StyleType.Paragraph, "cellStyle"); style.Font.Name "simsun"; PageSetup pageSet doc.Sections[0].PageSetup; pa…...

pycharm 工具栏不见了

新版pycharm后&#xff0c; 菜单栏和工具栏不见了 目录 我发现的解决方法&#xff1a; 其他旧版的解决方法&#xff1a; 我发现的解决方法&#xff1a; 其他旧版的解决方法&#xff1a; 另外&#xff0c;一些使用pycharm的新手可能会由于不熟悉软件的功能而误操作&#xff…...

图灵日记之java奇妙历险记--类和对象

目录 类的定义和使用类的定义格式 类的实例化类和对象的说明 this引用this引用的特性 对象的构造及初始化就地初始化构造方法 封装包导入包中的类自定义包 static成员static修饰成员变量static修饰成员方法 代码块代码块概念及分类构造代码块静态代码块 匿名对象 类的定义和使用…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...