【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

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

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

相关文章

5.27 day 30

知识点回顾&#xff1a; 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; 作业&#xff1a;自己新建几个不同路径文件尝试下如何导入 一、导入官方库 我们复盘下学习py…

【GitHub Pages】部署指南

vue项目 编辑你的 vite.config.ts 文件&#xff0c;加上 base 路径&#xff0c;设置为你的 GitHub 仓库名 import { defineConfig } from vite import vue from vitejs/plugin-vue// 假设你的仓库是 https://github.com/your-username/my-vue-app export default defineConfi…

远程控制技术全面解析:找到适合你的最佳方案

背景&#xff1a;远程控制为何成为企业核心需求&#xff1f; 随着企业数字化转型的推进&#xff0c;远程控制技术已成为异地办公和运维的关键工具。无论是跨国企业需要高效管理全球设备&#xff0c;还是中小型企业追求经济高效的解决方案&#xff0c;选择合适的远程控制技术&a…

触觉智能RK3506星闪开发板规格书 型号IDO-EVB3506-V1

产品概述 触觉智能RK3506星闪开发板&#xff0c;型号IDO-EVB3506-V1采用 Rockchip RK3506&#xff08;三核 Cortex-A7单核Cortex-M0, 主频最高1.5GHz&#xff09;设计的评估开发板&#xff0c;专为家电显控、显示HMI、手持终端、工业IOT网关、工业控制、PLC等领域而设计。内置…

九级融智台阶与五大要素协同的量子化解析

九级融智台阶与五大要素协同的量子化解析 摘要&#xff1a;本文构建了一个量子力学框架下的九级融智模型&#xff0c;将企业创新过程映射为量子能级跃迁。研究发现五大要素协同态决定系统跃迁概率&#xff08;P∣⟨Ψ_m∣H_协同∣Ψ_n⟩∣^2&#xff09;&#xff0c;当要素协同…

Kotlin学习34-data数据类1

定义如下&#xff1a;与普通类对比学习 //普通类 class NormalClass(val name: String, val age: Int, val sex: Char) //数据类 data class DataClass(val name: String, val age: Int, val sex: Char)对应找到java反编译的代码路径&#xff1a;Tool-->Kotlin-->Show K…

博图SCL基础知识-表达式及赋值运算

S7-1200 从 V2.2 版本开始支持 SCL 语言。 语言元素 SCL 除了包含 PLC 的典型元素&#xff08;例如&#xff0c;输入、输出、定时器或存储器位&#xff09;外&#xff0c;还包含高级编程语言表达式、赋值运算和运算符。 程序控制语句 SCL 提供了简便的指令进行程序控制。例…

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意义 海思3519V200是一款基于ARM架构的嵌入式芯片,广泛应用于智能安防、工业控制等领域。在这些应用场景中,对设备的图形用户界面(GUI)有着越来越高的要求。Qt5.8.0作为一个功能强大、跨平台的GUI开发框架,能够帮助开发者快速开发出美观、高效的用户界面。…

msql的乐观锁和幂等性问题解决方案

目录 1、介绍 2、乐观锁 2.1、核心思想 2.2、实现方式 1. 使用 version 字段&#xff08;推荐&#xff09; 2. 使用 timestamp 字段 2.3、如何处理冲突 2.4、乐观锁局限性 3、幂等性 3.1、什么是幂等性 3.2、乐观锁与幂等性的关系 1. 乐观锁如何辅助幂等性&#xf…

成都鼎讯--通信信号模拟设备​

在现代电磁通信领域&#xff0c;精准模拟复杂多变的信号环境&#xff0c;是提升通信装备性能与人员作战能力的核心命题。成都鼎讯以技术创新为驱动&#xff0c;凭借深厚的研发实力&#xff0c;重磅推出通信信号模拟设备&#xff0c;以前所未有的强大功能与卓越性能&#xff0c;…

C# Windows Forms应用程序-003

目录 项目结构 命名空间和类定义 主要控件 GroupBox 控件 Label 控件 TextBox 控件 Button 控件 OpenFileDialog 控件 方法说明 构造函数 Form1() Dispose(bool disposing) Main() InitializeComponent() button1_Click(object sender, System.EventArgs e) but…

【C/C++】死锁的四大条件与预防策略详解

文章目录 死锁的四大条件与预防策略详解一、死锁的产生条件&#xff08;四个必要条件&#xff09;二、代码示例三、死锁的预防手段&#xff08;以 C/C 为例&#xff09;1. 破坏“循环等待” —— 统一加锁顺序&#xff08;推荐&#xff09;2. 使用 std::lock 一次性加多个锁3. …

Rust编程环境安装

文章目录 Rust编程环境安装一、安装准备二、安装步骤对于Linux/macOS用户对于Windows用户 三、验证安装四、环境配置检查五、工具链管理六、附加功能七、常见问题处理八、编辑器支持九、其他 Rust编程环境安装 一、安装准备 1. 支持系统&#xff1a;Windows/Linux/macOS 2. 所…

OpenHarmony平台驱动使用(五),HDMI

OpenHarmony平台驱动使用&#xff08;五&#xff09; HDMI 概述 功能简介 HDMI&#xff08;High Definition Multimedia Interface&#xff09;&#xff0c;即高清多媒体接口&#xff0c;主要用于DVD、机顶盒等音视频Source到TV、显示器等Sink设备的传输。 HDMI以主从方式工…

【Git】Commit Hash vs Change-Id

文章目录 1、Commit 号2、Change-Id 号3、区别与联系4、实际场景示例5、为什么需要两者&#xff1f;6、总结附录——Gerrit 在 Git 和代码审查工具&#xff08;如 Gerrit&#xff09;中&#xff0c;Commit 号&#xff08;Commit Hash&#xff09; 和 Change-Id 号 是两个不同的…

leetcode hot100刷题日记——21.不同路径

和20题一样的思路link 题解&#xff1a; class Solution { public:int dfs(int i,int j,vector<vector<int>>&memo){//超过了边界&#xff0c;return 0if(i<0||j<0){return 0;}//从&#xff08;0&#xff0c;0&#xff09;到&#xff08;0&#xff0c;0…

day2 MySQL表数据操作

一&#xff1a;数据操作 注&#xff1a;在编写MySQL代码时可以不用区分大小写 1.查看表结构 desc 表名; -- 查看表中的字段类型&#xff0c;长度&#xff0c;约束。 2.字段的增加 AFTER table 表名 add 字段名 数据类型; -- 默认末尾添加 after table 表名 add 字段名 …

GitAny - 無需登入的 GitHub 最新倉庫檢索工具

地址&#xff1a;https://github.com/MartinxMax/gitany GitAny - 無需登入的 GitHub 專案搜尋工具 GitAny 是一款基於 Python 的工具&#xff0c;允許你在無需登入的情況下搜尋當天最新的 GitHub 專案。它支援模糊搜尋、條件篩選以及倉庫資料的視覺化分析。 安裝依賴 $ pip…

格恩朗金属管浮子流量计 高精度测量的不二之选​

在流量测量的复杂领域&#xff0c;精度就是生命线&#xff0c;直接关乎生产的稳定性、产品的质量以及资源的合理利用。大连格恩朗品牌的金属管浮子流量计&#xff0c;凭借其卓越的精度表现&#xff0c;成为各行业在流量测量时的最佳之选。​ 格恩朗金属管浮子流量计运用经典的可…

【R语言编程绘图-箱线图】

基本箱线图绘制 使用ggplot2绘制箱线图的核心函数是geom_boxplot()。以下是一个基础示例&#xff0c;展示如何用iris数据集绘制不同物种&#xff08;Species&#xff09;的萼片长度&#xff08;Sepal.Length&#xff09;分布&#xff1a; library(ggplot2) ggplot(iris, aes(…