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()函数。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试/测试开发丨Pytest测试用例生命周期管理-Fixture

1、Fixture 用法 Fixture 特点及优势 1&#xff64;命令灵活&#xff1a;对于 setup,teardown,可以不起这两个名字2&#xff64;数据共享&#xff1a;在 conftest.py 配置⾥写⽅法可以实现数据共享&#xff0c;不需要 import 导⼊。可以跨⽂件共享3&#xff64;scope 的层次及…

Linux内核中断

Linux内核中断 ARM里当按下按键的时候&#xff0c;他首先会执行汇编文件start.s里面的异常向量表里面的irq,在irq里面进行一些操作。 再跳转到C的do_irq(); 进行操作&#xff1a;1&#xff09;判断中断的序号&#xff1b;2&#xff09;处理中断&#xff1b;3&#xff09;清除中…

2024美赛数学建模思路A题B题C题D题E题F题思路汇总 选题分析

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间&#xff1a;北京时间2024年2月2日&#xff08;周五&#xff…

【JavaScript】new原理解析

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类&#xff0c;我们继承这个类时&#xff0c;也要实现decode方法&#xff0c;示例如下&#xff1a; package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…

Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....

安装教程&#xff08;系统、驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk&#xff09; 制作U盘启动盘&#xff0c;并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本&#xff0c;并使用Rufus制作UEFI启动盘&#xff0c;参考UEFI安装Ubuntu使用GPTUEFI模式安装&am…

【IoT网络层】STM32 + ESP8266 +MQTT + 阿里云物联网平台 |开源,附资料|

目标&#xff1a;实现STM32连接阿里云物联网平台发送数据同时接收数据&#xff0c;IOT studio界面显示数据。具体来说&#xff1a;使用ESP8266 ESP-01来连接网络&#xff0c;获取设备数据发送到阿里云物联网平台并显示且oled显示屏当前的设备数据&#xff0c;通过IOT studio界面…

OpenHarmony城市技术论坛武汉站:探索大模型时代的终端操作系统创新

2023年12月23日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)——第6期(武汉站)于华中科技大学梧桐语问学中心明德报告厅圆满举办。本次技术论坛聚焦“大模型时代的系统软件”,旨在探索AI大模型在终端操作系统领域的创新趋势和挑战。论坛从“终端操作系统十大技术挑战”…

最适合学生用的台灯有哪些?分享高口碑的学生护眼台灯

台灯是我们日常比较实用的一盏桌面照明灯具&#xff0c;不管是休闲看书、学习、办公都会用得上。如果使用了一款光源不好的台灯&#xff0c;时间长了可能就会影响我们的眼睛健康&#xff0c;特别是孩子的眼睛&#xff0c;还没有发育完全&#xff0c;影响更大。因此孩子学习的台…

模式识别与机器学习-SVM(带软间隔的支持向量机)

SVM&#xff08;带软间隔的支持向量机&#xff09; 软间隔思想的由来软间隔的引入 谨以此博客作为复习期间的记录。 软间隔思想的由来 在上一篇博客中&#xff0c;回顾了线性可分的支持向量机,但在实际情况中&#xff0c;很少有完全线性可分的情况&#xff0c;大部分线性可分…

MYSQL高级SQL语句

目录 一、环境准备 二、高级SQL语句 三、通配符&#xff08;通常通配符都是跟 LIKE 一起使用的&#xff09; 四、函数 一、环境准备 create database kgc; use kgc; create table location (Region char(20),Store_Name char(20)); insert into location values(East,Bost…

【算法与数据结构】860、LeetCode柠檬水找零

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题的思路比较简单&#xff0c;首先要保存收到的零钱&#xff0c;其次计算找零&#xff0c;最后分解找…

前缀和——OJ题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、和为 k 的子数组1、题目讲解2、思路讲解3、代码实现 二、和可被 K 整除的⼦数组1、题目讲…

【Pytorch】学习记录分享9——PyTorch新闻数据集文本分类任务实战

【Pytorch】学习记录分享9——PyTorch新闻数据集文本分类任务 1. 认为主流程code2. NLP 对话和预测基本均属于分类任务详细见3. Tensorborad 1. 认为主流程code import time import torch import numpy as np from train_eval import train, init_network from importlib impo…

【机器学习】西瓜书第6章支持向量机课后习题6.1参考答案

【机器学习】西瓜书学习心得及课后习题参考答案—第6章支持向量机 1.试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。 首先&#xff0c;直观解释二维空间内点到直线的距离&#xff1a; 由平面向量的有关知识&#xff0c;可得&#xff1a; 超平面的法向量为 w w w&am…

PHP的Laravel加一个小页面出现问题(whereRaw的用法)

1.权限更新问题 因为是已经有样例了所以html和php页面很快写出来了 然后就是页面写完了路由不知道在哪写&#xff0c;后来想起来之前有要开权限来着&#xff0c;试了一下&#xff0c;还是不行&#xff0c;不过方向是对了 这是加的路由&#xff0c;不过需要在更新一下权限 这…

开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置

Ant Design Pro 介绍 Ant Design Pro 是一个开箱即用的企业级前端解决方案&#xff0c;基于 Ant Design 设计体系&#xff0c;提供了丰富的组件和功能&#xff0c;帮助开发者更快速地开发和部署企业级应用。 Ant Design Pro 使用 React、umi 和 dva 这三个主要的前端开发技术…

Linux高级管理——yum仓库服务

一、部署yum软件仓库&#xff1a; 借助于YLM软件仓库&#xff0c;可以完成安装&#xff0e;卸载、自动升级rpm软件包等任务。YUM的前身是YUP (Yellow dog Updater, Yellow dog Linux的软件更新器),最初由TSS公司&#xff08;TerraSoft Solutions&#xff0c;INC.&#xff09;使…

数据结构--查找

目录 1. 查找的基本概念 2. 线性表的查找 3. 树表的查找 3.1 二叉排序树 3.1.1 定义: 3.1.2 存储结构&#xff1a; 3.1.3 二叉排序树的查找 3.1.4 二叉排序树的插入 3.1.5 二叉排序树删除 3.2 平衡二叉树&#xff08;AVL 3.2.1 为什么要有平衡二叉树 3.2.2 定义 3.3 B-树 3.3.1…

Linux命令-ps命令

ps用于显示进程 process&#xff1a;进程 执行&#xff1a;ps -ef -e&#xff1a;等价于 ‘-A’ &#xff0c;表示列出全部的进程 -f&#xff1a;显示全部的列&#xff08;显示全字段&#xff09;配合grep命令去搜索程序&#xff1a; ps -ef | grep sshd