【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述
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