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

发布于:2025-05-25 ⋅ 阅读:(18) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到