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 Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-jvm^y#hdr&^*eorr#twsf!p8n^r(_x9%*7(5+6m!2v7(19aucu'
DEBUG = True
ALLOWED_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 = True
USE_TZ = False
STATIC_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的dependencies
6 删除小程序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) {
// 向后端发送请求 -- 获取广告页 -- 赋值给img
wx.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-bar
left-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