??蘇州程式大白一文教你學會微信小程式開發??《??記得收藏??》
- 目錄
-
🏳??🌈開講啦!!!!🏳??🌈蘇州程式大白🏳??🌈 - 🌟博主介紹
- 🌠前言
- 🌠講講專享小程式有什么優勢?
- 🌠小程式檔案分析
- 🌠事件系結
- 🔥圖片問題
- 🔥輪播圖swiper
- 💧自定義組件
- 💧生命周期
- 🌐頁面生命周期
- 🌐專案制作
- 🌐緩沖事件
- 🌐`es7 async`語法
- 🌐觸底事件
- ??下拉重繪頁面
- ??css省略號
- ??預覽大圖
- ??購物車模擬
- ??獲取地址資訊
- ??結算功能
- 🌗登錄獲取用戶資訊
- 🌟作者相關的文章、資源分享🌟
- 🏳??🌈關注蘇州程式大白,持續更新技術分享,謝謝大家支持🏳??🌈
目錄
| 🏳??🌈開講啦!!!!🏳??🌈蘇州程式大白🏳??🌈 |

🌟博主介紹
💂 個人主頁:蘇州程式大白
🤟作者介紹:中國DBA聯盟(ACDU)成員,CSDN全國各地程式猿(媛)聚集地管理員,目前從事工業自動化軟體開發作業,擅長C#、Java、機器視覺、底層演算法等語言,2019年成立柒月軟體作業室,
💬如果文章對你有幫助,歡迎關注、點贊、收藏(一鍵三連)和C#、Halcon、python+opencv、VUE、各大公司面試等一些訂閱專欄哦
💅 有任何問題歡迎私信,看到會及時回復
👤 微信號:stbsl6,微信公眾號:蘇州程式大白
🎯 想加入技術交流群的可以加我好友,群里會分享學習資料
🌠前言
🌠講講專享小程式有什么優勢?
-
1、方便快捷:與其他購物平臺的APP、網站相比,小程式有一個很大的優勢——方便快捷,例如在使用其他購物平臺的APP時,不僅需要下載、安裝,而且還需要注冊、登陸,操作步驟繁瑣,即使不使用APP,直接登錄購物平臺的網站,也需要經過注冊、登錄的環節,但微信小程式不同,由于小程式是依附在微信上面使用的,因此無需下載和安裝,此外,在登陸時,用戶還可以選擇在利用微信賬號來登錄小程式,一鍵登陸,操作簡單、快捷,
-
2、入口眾多:小程式商城本身作為小程式的一個種類,具有很多開放入口,比如:附近的小程式、小程式碼、微信搜一搜、群分享、好友分享、公眾號關聯、推送等五十多個的入口,這些入口有助于企業更好的獲取流量,從而進行轉化、變現,
-
3、微信助力:相信大家都知道,小程式商城是基于微信運行的,這本身就是一個很大的優勢,如果是運營一個購物商城的網站或是APP,首先要做到的就是有用戶基數,而一個新平臺,獲取流量的難度是非常大的,但微信小程式,背靠微信,坐擁10億用戶,在這些用戶中,一定會有很多有相關需求的用戶,再加上附近的小程式、搜索發現小程式、公眾號關聯等,小程式可以非常輕松的獲取到大量流量,
-
4、場景營銷:上述提到,小程式擁有很多的入口,其中包括線上入口和線下入口,而小程式商城主要作為購物使用,所以,線下的入口很重要,小程式商城很多的使用頻率都是線下,再加上其擁有的營銷屬性,使得很多的商家解決了很多業務上的難題,更是大大節省了人力、物力、財力等成本,很大的提升了店鋪的業務效率,
-
5、開發成本低:企業進行微信小程式開發,既可以解決開發成本問題,又可以縮短開發周期,并且還可以利用微信已存在的營銷趨勢,用戶可以通過掃描二維碼進入,
🌠小程式檔案分析
-
1、
WXML WXSS JavaScript JSON, -
2、
page首頁log日志, -
3、頂部標題的顏色必須為
block和white,
tabBar
表示地址的tab欄【官網地址】
注意事項
-
在使用
bool型別充當型別屬性時,在屬性值的位置前面不能加空格, -
串列回圈` wx:for=”陣列或者物件”,
-
只有一層回圈時可以將一下省略,
-
串列回圈
wx:for-item="回圈項的名稱"wx:for-index=’index’`, -
wx:key=”唯一的值”, -
條件渲染
wx:ifwx:elifwx:else, -
hidden是添加樣式使用, -
物件回圈
wx:for="{{物件/陣列}}" wx:for-item="物件的值" wx:for-index="回圈專案的屬性",
<!--pages/demo/demo.wxml-->
<view>輪播圖</view>
<!-- image width 700px height 277px
x/1 = 277/700 x=277/700
-->
<swiper class="swiper" autoplay interval="1000" circular indicator-dots>
<swiper-item> <image mode="widthFix" src="https://m.360buyimg.com/mobilecms/s700x280_jfs/t1/175759/5/697/309624/605fa953Eaddcc402/30b0ea12dc5cc42c.jpg!cr_1125x445_0_171!q70.jpg.dpg" alt=""/></swiper-item>
<swiper-item> <image mode="widthFix" src="https://m.360buyimg.com/mobilecms/s700x280_jfs/t1/143564/28/18582/124317/60667523E2a4840dd/301bbb3de0243db8.jpg!q70.jpg.dpg" alt=""/></swiper-item>
<swiper-item> <image mode="widthFix" src="https://m.360buyimg.com/mobilecms/s700x280_jfs/t1/155887/8/16711/104572/60534627Eb979dc75/cc416de39d2e83b0.jpg!cr_1125x445_0_171!q70.jpg.dpg" alt=""/></swiper-item>
</swiper>
<!-- 單選框 -->
<radio-group bindchange="bindChange">
<radio name="sex" value="male">男</radio>
<radio name="sex" value="female">女</radio>
<view wx:if="{{gerder == 'male'}}">-您選擇的按鈕為男</view>
<view wx:elif="{{gerder == 'female'}}">-您選擇的按鈕為女</view>
<view wx:else="{{gerder == ''}}">-您選擇的按鈕為</view>
</radio-group>
<!-- 復選框 -->
<view>
<checkbox-group bindchange="bandelItemchange">
<checkbox wx:for="{{fruit}}" wx:key="id" value="{{item.value}}">
{{item.name}}
</checkbox>
<view>選中的是:{{checkList}}</view>
</checkbox-group>
</view>
<!-- 組件 -->
<Tabs></Tabs>
<rich-text class="" nodes="{{html}}">
</rich-text>
<view>input標簽</view>
<input type="text" bindinput="handleInput"/>
<view class="btn">
<button size="mini" bindtap="handeltap" data-opertation="1">+</button>
<button size="mini" bindtap="handeltap" data-opertation="{{-1}}">-</button>
</view>
<image mode="widthFix" src="https://cdn.jsdelivr.net/gh/Rr210/image@master/hexo/4/wallhaven-oxxw29.webp"></image>
<view>{{num}}</view>
<view>----------------------------</view>
<text>測驗頁面</text>
<view>'text'相當于web中的span元素,view相當于web中的div標簽塊級元素</view>
<view>測驗wx:for標簽</view>
<view>---------------------</view>
<view>串列回圈</view>
<view wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="username">
屬性:{{item.id}}
索引: {{index}}
名稱:{{item.name}}
年齡:{{item.age}}
年齡:{{item.msg.con}}
</view>
<view>物件回圈</view>
<view wx:for="{{msg}}" wx:for-item="value" wx:for-index="key" wx:key="id">
{{value}}
{{key}}
</view>
<view>---------------------</view>
<view>測驗 wx:if</view>
<view wx:if="{{false}}">1</view>
<view wx:elif="{{false}}">2</view>
<view wx:elif="{{true}}">3</view>
<view>---------------------</view>
<view>測驗 hidden</view>
<view hidden="{{true}}">1</view>
<view hidden>1</view>
🌠事件系結
1、nput標簽系結input事件 使用bindinput屬性,
2、通過事件源物件來獲取input輸入的值 e.detail.value,
3、與data同級 并且可以將input中輸入的值與data中定義的屬性系結,使用this.setData({屬性:e.detail.value}),
4、加入一個點擊事件 bindtap屬性,無法直接傳參 通過自定義屬性的方法來傳參,
-
在自定義屬性時要注意 如果傳遞的引數為數字,應該加
{{}}使得傳遞的引數為number,不加為string, -
注意input輸入后的值為字符型,需要將輸入的值轉換,
🔥圖片問題
1、比例尺的關系 1px =750rpx*設定的尺寸大小/page的寬度,
2、text 才能實作長按復制selectable decode解碼和復制,
3、image中屬性mode aspectFit是長邊能顯示出來 aspecFill使得短邊顯示出來 widthFix按照比例縮放,
4、圖片支持懶加載lazy-load 布林值,
🔥輪播圖swiper
1、輪播項swiper-item標簽里面放入圖片swiper 存在默認高度 150px,
2、高度無法實作由內容撐開,
3、圖片使用mode=“widthFix”,
4、indicator-dots 顯示面板指示點 indicator-color`` indicator-active-color,
5、autoplay自動輪播 5秒一次,
6、interval可以切換時間間隔,
7、circular 是否回圈輪播,
8、給圖片加100%寬度 ,swipter的高度自適應 100vw * 圖片的寬度 / 高度,


navigator 導航
1、url 表示要跳轉的頁面路徑,
2、相當于塊級元素,
3、target 跳轉小程式,默認當前小程式 可選值 self/minProgram,
4、open-type 跳轉方式,

rich-text 富文本標簽
1、nodes 接受字串,
2、物件陣列,
button標簽
1、size屬性 default/ mini,
2、open-type,
icon圖示
1、type型別,
2、size 大小 默認23,
3、color 改變顏色,
radio/checkbox
-
radio-ground系結change事件bindchange, -
checkbox-ground系結事件change,
💧自定義組件
1、在使用自定義組件時 要注意 在使用函式方法時要寫到methods中,
2、并且將被使用的組件寫到需要渲染頁面的json檔案中,
3、父組件向子組件 傳遞資料 通過自定義屬性來傳遞properties要接受的資料名稱· type/value·型別和值,
4、子向父傳遞 this.triggerEvent('名稱',傳遞的引數) 傳遞的時候要注意 傳遞的引數是什么形式,相對應,
5、子傳父,在子中定義一個要傳遞的事件方法和引數,在父中對事件方法進行系結,然后在父中使用方法,
6、資料在誰上,誰有權修改,
handleitemtap(e){
// 將點擊的事件加入自定義屬性
// console.log(e);
const {index} = e.currentTarget.dataset
let {tabs} = this.data
// console.log(index);
// 對以上的導航資料使用foreach進行遍歷
tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false)
this.setData({
tabs
})
}
-------------------
<view class="nav">
<view bindtap="handleitemtap" wx:for="{{tabs}}" wx:key="id" class="title_item {{item.isActive?'active':''}}" data-index="{{index}}">{{item.name}}</view>
</view>
slot標簽其實就是一個占位符,等到父組件呼叫子組件的時候,在傳遞標簽,
💧生命周期
// app.js
App({
// 表示在應用第一次啟用時就執行
onLaunch(e){
console.log(e);
console.log('launch');
// 不能觸發
// wx.navigateTo({
// url: 'url',
// })
},
// 應用被用戶看到時執行
onShow(e){
// 對資料的重置
console.log('onshow');
},
// 應用被隱藏的時候所執行的
onHide(e){
// 清除定時器
console.log('onHide');
},
// 應用發生錯誤時執行
onError(err){
console.log('onError');
// console.log(err);
},
// 應用找不到頁面時觸發
onPageNotFound(e){
// 無法跳轉到tabbar頁面,如果頁面不存在可以重定向到第二個頁面
console.log('onPageNotFound');
wx.navigateTo({
url: '/pages/demo/demo',
})
}
})

🌐頁面生命周期

🌐專案制作
promise封裝函式
export const request=(params)=>{
return new Promise((resolve,reject)=>{
wx.request({
...params,
success:(result)=>{
resolve(result)
},
fail:(err)=>{
reject(err)
}
});
})
}
request({url:"https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata"})
.then(result=>{
this.setData({
swiper_list: result.data.message
})
})
🌐緩沖事件
1、設定一個緩沖事件,獲取本地的存盤中的資料進行判斷,
2、·{time:Date.now(),data:[...]},
3、web: localStorage.setItem("key","value") localStorage.getItem("key"),
4、優化介面的路徑 使用prominse中的params將url解構出來,
🌐es7 async語法
-
解決回溯的最終方案,
-
async,
🌐觸底事件
1、onReachBottom 頁面觸底事件,
2、頁面上拉觸底事件的處理函式,觸底事件,當頁面觸底之后,在進行請求,并且將請求到的資料在追加到原來的陣列中,并且在觸底后還要進行判斷如果總資料的頁數>=當前的頁數,要回傳wxwx.showToast({title: ‘title’,}),否則繼續請求,
// pages/goods_list/goods_list.js
import { request } from "../../request/index.js";
Page({
/**
* 頁面的初始資料
*/
data: {
// 將這些資料匯入到子檔案中
tabs: [{
id: 0,
value: '綜合',
isActive: true
},
{
id: 1,
value: '銷量',
isActive: false
},
{
id: 2,
value: '價格',
isActive: false
}
],
first_list:[],
},
// 設定請求后回傳的總頁面的數量
totalpages:1,
handleChage(e){
// console.log(e);
// 將子傳遞給父親的索引值解構出來
const {id} = e.detail
// 將父親data的資料進行解構
let {tabs} = this.data
// 將data中的資料進行遍歷 如果此時的索引值等于資料中的id值則將資料中的isActive的值改為true
// 這里的v表示的是遍歷的資料,i表示的是索引號
tabs.forEach((v,i) =>i===id?v.isActive=true:v.isActive=false);
// 將這里修改的資料加到源資料中
this.setData({
tabs
})
},
// 頁面觸底事件
pageParams:{
query:'',
cid:'',
pagenum:1,
pagesize:10
},
// 對介面資料進行請求
async getgoodList(e){
const res = await request({
url:'/goods/search',
data: this.pageParams
})
console.log(res);
// 先獲取頁面的總資料,計算出頁碼資訊
const goodspages = Math.ceil(res.data.message.total / this.pageParams.pagesize)
console.log(goodspages)
this.totalpages = goodspages
this.setData({
// 這一步是將請求到的資料在使用陣列拼接的方式拼接起來,這里用到了陣列解構的方法
first_list:[...this.data.first_list,...res.data.message.goods],
})
},
/**
* 生命周期函式--監聽頁面加載
*/
onl oad: function (options) {
// console.log(options);
this.pageParams.cid = options.cat_id
this.getgoodList()
},
/**
* 頁面上拉觸底事件的處理函式,觸底事件,當頁面觸底之后,在進行請求,并且將請求到的資料在追加到原來的陣列中,并且在觸底后還要進行判斷如果總資料的頁數>=當前的頁數,要回傳wxwx.showToast({title: 'title',}),否則繼續請求
*/
onReachBottom: function () {
this.pageParams.pagenum++;
// 進行頁面觸底的判斷
if(this.totalpages<=this.pageParams.pagenum){
wx.showToast({
title: '頁面加載完成',
})
}else{
this.getgoodList()
}
},
/**
* 生命周期函式--監聽頁面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函式--監聽頁面顯示
*/
onShow: function () {
},
/**
* 生命周期函式--監聽頁面隱藏
*/
onHide: function () {
},
/**
* 生命周期函式--監聽頁面卸載
*/
onUnload: function () {
},
/**
* 頁面相關事件處理函式--監聽用戶下拉動作
*/
onPullDownRefresh: function () {
},
/**
* 用戶點擊右上角分享
*/
onShareAppMessage: function () {
}
})
??下拉重繪頁面
-
重置資料,
-
重置頁碼,
-
然后在請求方法的最后加上 關閉下拉重繪的方法,
-
顯示加載中提示,在頁面請求之前顯示
complete方法, -
在頁面請求加載之前首先先顯示加載按鈕在頁面加載結束后隱藏
呼叫wx.request方法中的第三個函式方法complete,
// 如果在執行異步操作時,對隱藏加載按鈕進行處理,不做處理頁面還未加載完成就結束了
let ajaxtimes = 0;
export const request=(params)=>{
ajaxtimes++;
// 在頁面請求加載之前首先先顯示加載按鈕在頁面加載結束后隱藏 呼叫wx.request方法中的第三個函式方法complete
wx.showLoading({
title: '加載中',
})
// 將介面的公共部分解構出來,在進行拼接
const baseUrl = 'https://api-hmugo-web.itheima.net/api/public/v1'
return new Promise((resolve,reject)=>{
wx.request({
...params,
url:baseUrl+params.url,
success:(result)=>{
resolve(result)
},
fail:(err)=>{
reject(err)
},
// 請求完成或者失敗都會執行
complete:()=>{
ajaxtimes--;
// 如果ajaxtimes的值不等于0,不執行隱藏函式
if(ajaxtimes===0){
wx.hideLoading()
}
}
});
})
}
??css省略號
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
??預覽大圖
1、點擊輪播圖位置得圖片實作大圖得預覽效果,
2、為輪播圖添加一個點擊事件,
3、使用事件 previewImage,
4、給小程式添加大圖預覽效果 使用 wx.previewImage方法來實作,首先是在輪播圖的遍歷圖片的位置添加一個函式方法,然后在方法內使用pre方法,并且將獲取到的圖片從串列中選出后生成一個新的串列使用map方法,由于是異步函式,所以必須將串列單獨拿出來,給swiper加上一個自定義id值,當用戶點擊某一張圖片時將該圖片放大,獲取該點擊事件得圖片id值,使用解構得方法,
??購物車模擬
1、對加入購物車事件進行處理,點擊加入購物車 先對本地緩沖中得cart緩沖進行判斷如果存在則使得該商品得總數num+1,否則將當前商品得數量設定為1,使用findIndex方法,如果不滿足條件則回傳-1,
handleshopAdd(e) {
let cart = wx.getStorageSync('cart') || []
let index = cart.findIndex(v =>v.data.message.goods_id === this.infoData.data.message.goods_id)
if (index === -1) {
this.infoData.num = 1
cart.push(this.infoData)
} else {
cart[index].num++;
// console.log(cart[index].num);
}
// console.log(index);
wx.setStorageSync('cart', cart)
wx.showToast({
title: '加入購物車成功',
icon: 'success',
// 防抖操作
mask: true
})
}
??獲取地址資訊
data: {
address: false
},
// 點擊獲取地址按鈕事件
handleButtonAddress(e){
// console.log(e);
// 將獲取到得地址資訊存入到緩沖中
wx.chooseAddress({
success: (result) => {
// console.log(result);
// 設定一個緩沖資訊
wx.setStorageSync('address', result);
}
})
},
// 在onshow事件內進行判斷如果緩沖中存在資料則將地址呈現到頁面中
onShow: function(){
// 先判斷緩沖中是否存在資訊,如果存在將資料存入到 data中并呈現到頁面中
// 先獲取緩沖中得資料
let address = wx.getStorageSync('address');
if(address){
this.setData({
address
})
// 將資料呈現到頁面中
console.log(this.data.address);
}else{
console.log('緩沖中得資料不存在');
}
}
??結算功能
使用遍歷中的every方法
//Page Object
Page({
data: {
address: false,
cart_list: [],
Allchecked: false,
totalPrice:0,
totalNum:0
},
// 點擊獲取地址按鈕事件
handleButtonAddress(e) {
// console.log(e);
// 將獲取到得地址資訊存入到緩沖中
wx.chooseAddress({
success: (result) => {
console.log(result);
// 設定一個緩沖資訊
wx.setStorageSync('address', result);
}
})
},
// 在onshow事件內進行判斷如果緩沖中存在資料則將地址呈現到頁面中
onShow: function () {
// 先判斷緩沖中是否存在資訊,如果存在將資料存入到 data中并呈現到頁面中
// 先獲取緩沖中得資料
let address = wx.getStorageSync('address');
// 獲取快取中的購物車資訊
const cart_list = wx.getStorageSync('cart') || []
// 使用遍歷方法every
// const Allchecked = cart_list.length ? cart_list.every(v => v.checked) : false
// 購物車結算,將用戶選中的商品的數量相加,為總數量;單個商品的價格和數量相乘相加得到商品的總價格
this.setCart(cart_list)
if (address) {
this.setData({
address
})
// 將資料呈現到頁面中
// console.log(this.data.address);
}
},
// 給checkbox添加一個改變屬性
handleItemChecked(e){
// console.log(e);
// 獲取選中改變商品的id,解構出來
const {id} = e.currentTarget.dataset
// 找到緩沖中的相應的商品,同時進行判斷如果修改checed屬性值
const {cart_list} = this.data
// 使用findIndex方法對緩沖中的陣列進行遍歷
const index = cart_list.findIndex(v=>v.data.message.goods_id==id)
// 找出用戶改變商品選中狀態的索引值,修改該索引值下商品的checked的值
cart_list[index].checked = !cart_list[index].checked
// console.log(index);
this.setCart(cart_list)
},
// 封裝一個計算商品總數和商品總價格的函式方法
setCart(cart_list){
let totalPrice = 0;
let totalNum = 0;
let Allchecked = true
// 使用forEach方法對緩沖中的陣列進行遍歷
cart_list.forEach(v=>{
if(v.checked){
totalPrice += v.data.message.goods_price*v.num
totalNum += v.num
}else{
Allchecked= false
}
})
// 并且當用戶的串列為空時不進行遍歷
Allchecked=cart_list.length !=0?Allchecked:false
// console.log(cart_list);
// console.log(Allchecked);
this.setData({
cart_list,
Allchecked,
totalPrice,
totalNum
})
},
🌗登錄獲取用戶資訊
使用getgetUserProfile
getUserProfile(e) {
// console.log(e);
// 判斷緩沖中是否存在用戶id
wx.getUserProfile({
desc: '用于完善會員資料', // 宣告獲取用戶個人資訊后的用途,后續會展示在彈窗中,請謹慎填寫
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
wx.setStorageSync('userinfo', res.userInfo);
const userinfo = wx.getStorageSync('userinfo');
if (userinfo) {
wx.switchTab({
url: '/pages/user/user'
})
}
}
})
}
🌟作者相關的文章、資源分享🌟
🌟讓天下沒有學不會的技術🌟
學習C#不再是難問題
🌳《C#入門到高級教程》🌳
有關C#實戰專案
👉C#RS232C通訊原始碼👈
👉C#委托資料傳輸👈
👉C# Modbus TCP 源代碼👈
👉C# 倉庫管理系統原始碼👈
👉C# 歐姆龍通訊Demo👈
👉C# 歐姆龍通訊Demo👈
👉2021C#與Halcon視覺通用的框架👈
?有關C#專案歡迎各位查看個人主頁?
🌟機器視覺、深度學習🌟
🌌《Halcon入門到精通》🌌
🌌《深度學習資料與教程》🌌
有關機器視覺、深度學習實戰
👉2021年C#+HALCON視覺軟體👈
👉2021年C#+HALCON實作模板匹配👈
👉C#集成Halcon的深度學習軟體👈
👉C#集成Halcon的深度學習軟體,帶[MNIST例子]資料集👈
👉C#支持等比例縮放拖動的halcon WPF開源表單控制元件👈
👉2021年Labview聯合HALCON👈
👉2021年Labview聯合Visionpro👈
👉基于Halcon及VS的動車組制動閘片厚度自動識別模塊👈
?有關機器視覺、深度學習實戰歡迎各位查看個人主頁?
🌟Java、資料庫教程與專案🌟
🍏《JAVA入門到高級教程》🍏
🍏《資料庫入門到高級教程》🍏
有關Java、資料庫專案實戰
👉Java經典懷舊小霸王網頁游戲機原始碼增強版👈
👉Java物業管理系統+小程式原始碼👈
👉JAVA酒店客房預定管理系統的設計與實作SQLserver👈
👉JAVA圖書管理系統的研究與開發MYSQL👈
?有關Java、資料庫教程與專案實戰歡迎各位查看個人主頁?
🌟分享Python知識講解、分享🌟
🥝《Python知識、專案專欄》🥝
🥝《Python 檢測抖音關注賬號是否封號程》🥝
🥝《手把手教你Python+Qt5安裝與使用》🥝
🥝《用一萬字給小白全面講解python編程基礎問答》🥝
🥝《Python 繪制Android CPU和記憶體增長曲線》🥝
有關Python專案實戰
👉Python基于Django圖書管理系統👈
👉Python管理系統👈
👉2021年9個常用的python爬蟲原始碼👈
👉python二維碼生成器👈
?有關Python教程與專案實戰歡迎各位查看個人主頁?
🌟分享各大公司面試題、面試流程🌟
🍏《2021年金九銀十最新的VUE面試題??《??記得收藏??》》🍏
🍏《只要你認真看完一萬字??Linux作業系統基礎知識??分分鐘鐘都吊打面試官《??記得收藏??》》🍏
🍏《??用一萬字給小白全面講解python編程基礎問答??《😀記得收藏不然看著看著就不見了😀》》🍏
?有關各大公司面試題、面試流程歡迎各位查看個人主頁?

🏳??🌈關注蘇州程式大白,持續更新技術分享,謝謝大家支持🏳??🌈

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303304.html
標籤:java
