1 項目功能描述
# 智慧社區-小程序-1 歡迎頁-加載后端:動態變化-2 首頁-輪播圖:動態-公共欄:動態-信息采集,社區活動,人臉檢測,語音識別,心率檢測,積分商城-3 信息采集頁面-采集人數展示-采集列表-4 采集詳情頁面-打開攝像頭拍照:提交后端保存-5 采集統計頁面-6 人臉檢測-7 語音識別-8 積分商城-9 活動-10 公告-公告列表展示-11 我的個人中心-個人信息展示-12 登錄功能
2 創建項目
2.1 創建小程序端
# 1 微信開發者工具,創建項目
# 2 純凈化
# 3 創建4個頁面,并全部配置為tabbar頁面(app.json),設置全局window屬性(app.json)-首頁index-我的my-公告notice-活動activity
# 4 微信開發者工具-詳情-本地設置-不校驗合法域名等等
2.2 創建后端項目
# 0 安裝python和pycahrm
# 1 使用python的django框架+drf編寫+splite
# 2 創建項目 smart_demo_backend,創建app:smart
# 3 清理無用setting.py,配置國際化
# 4 運行在0.0.0.0的8000端口
1 創建python項目
創建成功
2 配置
# smart_demo_backend/settings.py
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent.parentSECRET_KEY = 'django-insecure-jvm^y#hdr&^*eorr#twsf!p8n^r(_x9%*7(5+6m!2v7(19aucu'DEBUG = TrueALLOWED_HOSTS = []INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','smart.apps.SmartConfig',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'smart_demo_backend.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'smart_demo_backend.wsgi.application'# 如果使用splite數據庫,不需要改動
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_TZ = FalseSTATIC_URL = 'static/'DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'## 開啟media訪問
3 修改配置
微信小程序訪問后端,則后端項目設置為運行在0.0.0.0:8000端口
3 小程序集成vant-app
3.1 node介紹
# 1 正常前端的js代碼只能運行在瀏覽器中-瀏覽器中有js的解釋器環境# 2 作為前端來講,只能寫前端,寫不了后端,-需要學后端語言,python/go/java等# 3 于是乎有大神,把chrome瀏覽器的v8引擎,使用c重寫了,讓它可以安裝在操作系統之上-我們就可以使用js語法寫后端了# 4 作為前端開發,不需要學新語法,使用js語法,實現前端后端開發# 5 好多第三方模塊,是使用node構建的-vue
js的解釋器環境,沒有裝在操作系統而是瀏覽器上,因為js必須在瀏覽器里運行
3.2 vant-weapp介紹&集成
https://vant-ui.github.io/vant-weapp/?spm=a2c6h.13046898.publish-article.19.64f36ffa6o7LOM#/home
# 1 小程序上如果純自己寫樣式,對前端css要求比較高
# 2 使用第三方ui庫,快速構建頁面
# 3 vant-weapp-vant: 有贊團隊出品的ui框架,做手機端ui比較多,是移動端ui框架-vue端-react端-微信小程序端,vant-weapp
https://vant-ui.github.io/vant-weapp/?spm=a2c6h.13046898.publish-article.19.64f36ffa6o7LOM#/home-目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社區團隊維護 React 版本和支付寶小程序版本。# 4 集成步驟1 需要小程序支持安裝npm包(vant-weapp)-注意:使用專門為微信小程序提供npm的包,不是所有第三方包都支持微信小程序-https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html#%E5%8F%91%E5%B8%83-npm-%E5%8C%85-小程序環境比較特殊,一些全局變量(如 window 對象)和構造器(如 Function 構造器)是無法使用的。-npm包內部編寫時使用了window,但到了小程序中就不能使用,因此這個npm包在小程序中無法使用-vant-weapp包支持在小程序使用2 電腦環境安裝node.js-node.js類型python解釋器-安裝完后會釋放2個命令:node和npm命令-node:對應python,執行代碼-npm:對應pip,安裝第三方模塊-一路next,自動加入環境變量-node和npm命令3 使用npm安裝vant-weapp模塊-由于npm是國外下載,速度較慢-方式一:等-方式二:使用鏡像,cnpm代替npm-安裝cnpm-npm install -g cnpm --registry=https://registry.npm.taobao.org-本地就會有cnpm,下載相較npm會快一些4 小程序根路徑:打開命令行[微信開發者工具,右鍵-在內建終端打開,注意路徑是項目根路徑]-npm init -y # 生成package.json文件-讓項目集成vant,集成vant需支持npm,因此先生成npm的配置文件,使其可支持npm安裝包5 安裝vant-npm i @vant/weapp -S- -S,保存到package.json的dependencies6 刪除小程序app.json-將 app.json 中的 "style": "v2" 去除,小程序的新版基礎組件強行加上了許多樣式,難以覆蓋,不關閉將造成部分組件樣式混亂。7 在project.config.json的setting加入"packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}],8 構建工具 - 構建npm-構建ok,集成vant-weapp成功
4.2 檢查是否有node
4.4 生成package.json文件
4.5 安裝vant
package.json的dependencies會多一個vant/weapp
4.6
4.7
4.8
3.3 vant使用
https://vant-ui.github.io/vant-weapp/?spm=a2c6h.13046898.publish-article.19.64f36ffa6o7LOM#/cell
# 1 引入vant的組件,在app.json或index.json引入組件-app.json 全局所有頁面都生效-index.json 只在當前頁面生效# 2 使用vant組件-復制官網代碼
1 在app.json引入組件
2 使用vant組件
4 歡迎頁
# 1 一打開小程序,先用一個大圖片蓋住【打廣告】,3s后自動跳轉到首頁
# 2 新建頁面welcome
# 3 廣告圖添加到項目中
4.1 靜態頁面
4.1.1 wxml
<!--pages/welcome/welcome.wxml-->
<view class="container"><text class="jump" bind:tap="doJump">跳過{{second}}秒</text><image class="img" src="/images/兩狗對視.jpg" mode=""/>
</view>
4.1.2 js
// pages/welcome/welcome.js
Page({/*** 頁面的初始數據*/data: {second: 3},onLoad(options) {// 啟動定時器,倒計時// 清除定時器var instance = setInterval(()=>{if(this.data.second <= 0) {// 清除定時器clearInterval(instance);this.doJump();} else {this.setData({second: this.data.second-1})} },1000);},doJump() {//點擊跳轉首頁wx.switchTab({url: '/pages/index/index',})}
})
4.1.3 wxss
/* pages/welcome/welcome.wxss */
page {height: 100%;
}
.container {width: 100%;height: 100%;
}.container .img {width: 100%;height: 100%;
}
.jump {font-size: 30rpx;position: absolute;left: 600rpx;top: 80rpx;background-color: #dddddd;padding: 10rpx 20rpx;border-radius: 20rpx;
}
效果
4.2 后端加載歡迎頁
# 1 廣告頁寫死,后期不能變化
# 2 結合后端,可以動態變化-后臺運營人員,可以上傳廣告圖片-廣告圖片可實時在小程序端變化# 3 配合后端接口動態獲取圖片
4.2.1 創建表模型
# 歡迎圖片表-圖片地址-排序 --> 只有一個,取出數據庫中數字最大-創建時間 --> 上傳時間-is_delete--> 軟刪除,前端查不到
pip裝pillow包報錯,不看了。
4.2.2 開啟media訪問
跳過。
4.2.3 使用admin上傳圖片
跳過。
4.2.4 寫視圖控制函數
跳過。
4.2.5 小程序端
# 1 image的src改為變量img
# 2 請求接口返回img
# 注意:先展示默認圖,等后臺接口返回配置的圖片再替換,合計是3s
1 image的src改為變量img
<!-- pages\welcome\welcome.wxml -->
<view class="container"><text class="jump" bind:tap="doJump">跳過{{second}}秒</text><image class="img" **src="{{img}}"** mode=""/>
</view>
// pages/welcome/welcome.js
Page({/*** 頁面的初始數據*/data: {second: 3,img: '/images/兩狗對視.jpg'},onLoad(options) {// 向后端發送請求 -- 獲取廣告頁 -- 賦值給imgwx.request({url:'http://127.0.0.1:8000/smart/welcome',method: 'get',success:(res)=>{if(res.data.code === 100) {this.setData({img: res.data.result})} else {wx.showToast({title:'網絡請求異常'})}},fail: (error)=>{wx.showToast({title:'網絡請求異常'})}})// 啟動定時器,倒計時// 清除定時器var instance = setInterval(()=>{if(this.data.second <= 0) {// 清除定時器clearInterval(instance);this.doJump();} else {this.setData({second: this.data.second-1})} },1000);},doJump() {//點擊跳轉首頁wx.switchTab({url: '/pages/index/index',})}
})
5 首頁
5.1 靜態頁面
# 要素-輪播圖,swiper小程序組件-vant-weapp的通知欄組件1 app.json引入組件(屬性usingComponents)2 index.wxml使用組件-快捷入口:vant-weapp的grid宮格-引入和使用-底部:圖片,image標簽和flex布局
代碼實現
<!--pages\index\index.wxml-->
<!--index.wxml-->
<view class="container"><!-- 輪播圖 --><view class="banner"><swiper autoplay indicator-dots circular indicator-color="#fff" interval="3000"><swiper-item><image src="/images/兩狗對視.jpg" mode=""/></swiper-item><swiper-item><image src="/images/可愛柯基.jpg" mode=""/></swiper-item><swiper-item><image src="/images/貓貓吃魚.jpg" mode=""/></swiper-item><swiper-item><image src="/images/藍金漸層.jpg" mode=""/></swiper-item></swiper> </view><!-- 通知 --> <van-notice-barleft-icon="volume-o"text="在代碼閱讀過程中人們說臟話的頻率是衡量代碼質量的唯一標準。"/><!-- 快捷入口 --><van-grid column-num="3"><van-grid-item icon="photo-o" text="文字" wx:for="{{ 6 }}" /></van-grid><!-- 底部 --><view class="bottom"><view><image src="/images/藍金漸層.jpg" mode=""/></view><view><image src="/images/兩狗對視.jpg" mode=""/></view><view><image src="/images/可愛柯基.jpg" mode=""/></view><view><image src="/images/貓貓吃魚.jpg" mode=""/></view></view>
</view>
效果
6 個人頁
6.1 靜態頁面
up直接復制的,不想寫,估計后面還得寫,再說吧
p10 51:00