今日内容
1 Mysql8.4 安装
# 1 微信小程序需要存储用户数据:用户名密码。。。---》存在数据库管理软件
-mysql:开源免费-社区维护---》互联网公司用的多
-oracle:收费,国外企业用的多;早期政府部门
-oracle--》收购了mysql
。。。。
# 2 mysql 有很多版本--》企业中用的最多的--》8.x版本
-如果之前用过 5.7 老版本---》可以卸载或者多版本共存[可能会出问题]
# 3 开发环境在本地,所以我们需要把存储数据的Mysql安装在本地
Mysql:数据库管理软件---》创建出很多表:用户表,换脸表。。[excel表格],有很多字段--》存储数据
# 用户表
id name password age
1 张三 123 19
2 李四 456 20
# 换脸表
id 换脸时间 换脸用户
1 2025年12月14 1
1 2025年12月14 2
1.1 docker 安装和启动【最简单】
# 1 开发环境在本地,所以我们需要把存储数据的Mysql安装在本地
-并不是真正在win上安装了---》win的虚拟机中--》linux--》docker安装的
-是在本地---》在虚拟机中---》链接时候,需要使用ip地址链接:linux-ip地址
# 1 mysql 官方镜像:https://hub.docker.com/_/mysql 不需要手动操作
# 2 拉取 mysql 8 -----》速度可能会慢--》提供给大家很多
docker pull mysql:8.4.5
# 3 创建文件夹,授权
mkdir -p /home/lqz/mysql/data
mkdir -p /home/lqz/mysql/logs
chown -R 999:999 /home/lqz/mysql/data
chown -R 999:999 /home/lqz/mysql/logs
# 4 创建mysql配置文件
cd /home/lqz/mysql
vi my.cnf
[mysqld]
# MySQL 数据存储路径
datadir=/var/lib/mysql
# MySQL 错误日志路径
log-error=/var/log/mysql/error.log
# 启用远程连接
bind-address=0.0.0.0
# 设置字符集为 utf8mb4
character-set-server=utf8mb4
# 默认排序规则为 utf8mb4_0900_ai_ci,若需兼容 MySQL 5.7 可使用 utf8mb4_unicode_ci
collation-server=utf8mb4_0900_ai_ci
# 5 启动mysql
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=lqz12345 \
-p 3307:3306 \
-v /home/lqz/mysql/my.cnf:/etc/mysql/my.cnf \
-v /home/lqz/mysql/data:/var/lib/mysql \
-v /home/lqz/mysql/logs:/var/log/mysql \
mysql:8.4.5
# 6 查看mysql8是否正常启动
docker ps |grep mysql8
# 7 虚拟机关机了,docker会关掉--》再开启虚拟机时
systemctl start docker # 启动docker
# 8 还要启动mysql8
docker start mysql8
1.2 本地安装-win【真正装在本地】
# 1 很早之前写了一篇博客---mac或win
https://zhuanlan.zhihu.com/p/571585588
###############带你做#####################
# 1 下载mysql8.4.4
-https://downloads.mysql.com/archives/community/
# 2 解压到某个路径下--》不要带中文
-D:\soft1\mysql-8.4.4-winx64\mysql-8.4.4-winx64
# 3 在 bin所在目录创建 my.ini # 后缀名注意
# 4 创建 data文件夹:D:\soft1\mysql-8.4.4-winx64\mysql-8.4.4-winx64\data\
[mysqld]
# 设置3307端口--->如果装过老版本,占了3306,你就会装不上
port=3307
# 设置mysql的安装目录 ---这里输入你安装的文件路径----
basedir=D:\soft1\mysql-8.4.4-winx64\mysql-8.4.4-winx64\
# 设置mysql数据库的数据的存放目录
datadir=D:\soft1\mysql-8.4.4-winx64\mysql-8.4.4-winx64\data\
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8mb4
# 5 来到mysql解压后的bin路径下(以管理员身份运行)
以管理员打开cmd
D: # 回车
cd D:\soft1\mysql-8.4.4-winx64\mysql-8.4.4-winx64\bin
# 6 安装mysql 安装完成后Mysql会有一个随机密码(记住这个密码)--》这里可能会出错 dll文件缺失
mysqld --initialize --console
# 7 把mysql创建成系统服务
mysqld --install mysql8
# 8 启动mysql服务
net start mysql8
# 9 做成服务后,没有开启自启动--》win关机了,再开启,mysql没启动
命令行中执行:net start mysql8
在服务上点右键启动
# 10 做成开机自启动
如下图



1.3 命令行链接[会一些命令--有些难]-->我们不用
# 1 打开cmd
# 2 来到这个路径下输入:D:\soft\mysql-8.4.4-winx64\mysql-8.4.4-winx64\bin 输入
mysql -uroot -p -P 3307 # 回车后,输入密码,进入后
# 3 改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'lqz123?';
FLUSH PRIVILEGES;
# 4 后续命令不讲了--》因为要学很久
# 5 如果密码忘了:粗暴方式:
-删data文件夹
-mysqld --initialize --console

1.4 图形化界面操作mysql
# 1 DBeaver
优点:DBeaver功能比较强大,使用也较便利。缺点:对于系统资源要求较高,运行速度相对较慢,特别是导入大文件时比较明显。官方主页:https://dbeaver.io/
# 2 Navicat--收费的--》破解--》好用
# 个人没事
# 不要在公司内部使用破解--》这个公司能根据你的ip--》定位到你公司--》发律师函--》告你
优点:Navicat使用普及率较高,功能非常完整,包括比较强大的SQL补全、导入导出、结果集编辑、E-R模型、数据对比、结构对比、数据迁移等,但有部分功能仅企业版才具备。缺点:需要注册为Navicat用户才能够使用,而且定期会失效,需要重新下载和登录申请为免费使用。官方主页:https://navicat.com/
# 3 SQLyog
SQLyog更多的是专注于数据库的管理,包括性能、监控、优化等方面,也提供基础SQL编辑功能,所以在早期,其在DBA群体中比较受欢迎,但是在整体的开发者中,使用比率并不高。缺点:在云时代对于监控与实例管理方面的诉求在降低,在SQL开发与云适配上需求更强,但这方面发展缓慢,而且产品以商业收费版为主。官方主页:https://webyog.com/product/sqlyog/
# 4 编辑器链接--》ai特别方便
pycharm--》可以--》自行学习
Trae链接--》免费--》
1.5 Navicat链接--》图形化界面
# 1 老师提供了软件--》Navicat-Mysql图形化界面-收费-需破解-可以不用-密码-123.rar 解压--》密码123
# 2 Navicat Premium 16永久激活.zip 解压
# 3 按照步骤激活
# 4 点--》链接--》mysql--》连docker中的
如下图
# 5 连本地的




1.6 Trae插件链接--》图形化界面-免费-不怕被告
#1 点扩展--》安装mysql插件
# 2 链接即可
-只需要连一个即可:要么本地,要么docker中的






1.7 创建数据库
# 1 给我们后端项目用
-存储用户数据,换脸数据
# 2 Navicate创建
-右键--》新建数据库
-如下图
# 3 trae插件创建
-点 + ,改名字---》运行


2 编写后端
2.1 python普通调用Coze换脸
#1 后端调用coze换脸工作流
# 2 我们之前学的换脸工作流--》发布
# 3 创建aip_key:https://www.coze.cn/open/oauth/pats
-pat_9WJP2Ud93jGw7aOtIGYgjOeVPPQDguCOilyUv6cBWyQtk2akuqAljXxr2sws0AXy
# 4 拿到工作流id:
7536960050292998154
# 5 代码调用--》我写好了

import requests
import json
import time
import os
from typing import Optional, Dict, Any
'''
个人访问令牌:https://www.coze.cn/open/oauth/pats
'''
class CozeAPI:
"""Coze API客户端,用于调用Coze的换脸工作流"""
def __init__(self, api_key: str = None, workflow_id: str = None):
self.api_key = api_key or 'pat_9WJP2Ud93jGw7aOtIGYgjOeVPPQDguCOilyUv6cBWyQtk2akuqAljXxr2sws0AXy'
self.workflow_id = workflow_id or '7536960050292998154'
self.base_url = 'https://api.coze.cn'
self.upload_url = f"{self.base_url}/v1/files/upload"
self.run_url = f"{self.base_url}/v1/workflow/run"
self.headers = {'Authorization': f'Bearer {self.api_key}', 'Content-Type': 'application/json'}
def _get_save_path(self, task_id: str) -> str:
"""内部方法:生成图片保存路径(精简路径处理逻辑)"""
result_dir = os.path.join('face_swap', 'coze_results')
os.makedirs(result_dir, exist_ok=True)
filename = f"result_{task_id}_{int(time.time())}.jpg"
return os.path.join(result_dir, filename)
def download_image(self, image_url: str, task_id: str) -> Optional[str]:
"""下载图片到本地,返回跨平台路径"""
try:
save_path = self._get_save_path(task_id)
resp = requests.get(image_url, stream=True)
resp.raise_for_status()
with open(save_path, 'wb') as f:
for chunk in resp.iter_content(chunk_size=8192):
f.write(chunk)
print(f"图片下载成功: {save_path}")
return save_path.replace('\\', '/')
except Exception as e:
print(f"图片下载失败: {str(e)}")
return None
def upload_file(self, file_path: str) -> str:
"""上传文件到Coze并获取文件ID"""
if not os.path.exists(file_path):
raise FileNotFoundError(f"文件不存在: {file_path}")
try:
print(f"开始上传文件: {file_path}")
with open(file_path, 'rb') as f:
files = {'file': (os.path.basename(file_path), f)}
resp = requests.post(self.upload_url, headers={'Authorization': f'Bearer {self.api_key}'}, files=files)
print(f"上传响应: {resp.status_code} | {resp.text}")
result = resp.json()
if resp.status_code == 200 and result.get('code') == 0 and 'data' in result:
file_id = result['data'].get('id')
if not file_id:
raise Exception(f"未提取到文件ID: {result}")
print(f"文件上传成功,ID: {file_id}")
return file_id
raise Exception(f"文件上传失败: {result}")
except Exception as e:
print(f"文件上传异常: {str(e)}")
raise
def run_workflow(self, source_image: str, target_image: str) -> Dict[str, Any]:
"""运行Coze换脸工作流,返回任务信息"""
try:
# 批量上传文件
source_id, target_id = self.upload_file(source_image), self.upload_file(target_image)
payload = {
"workflow_id": self.workflow_id,
"parameters": {
"face": json.dumps({"file_id": source_id}),
"backed": json.dumps({"file_id": target_id}),
"text": "执行换脸操作"
},
"app_id": "",
"is_async": True
}
print(f"调用工作流 {self.workflow_id}...")
resp = requests.post(self.run_url, headers=self.headers, json=payload)
if resp.status_code != 200:
raise Exception(f"工作流调用失败: {resp.status_code} | {resp.text}")
result = resp.json()
if (result.get('code') == 0 or result.get('msg') == '') and (task_id := result.get('execute_id')):
print(f"工作流调用成功,任务ID: {task_id}")
return {'code': 0, 'msg': 'success',
'data': {'task_id': task_id, 'workflow_id': self.workflow_id, 'status': 'pending'}}
raise Exception(f"工作流调用失败: {result.get('msg')} | {result}")
except Exception as e:
print(f"工作流调用异常: {str(e)}")
raise
def get_workflow_result(self, task_id: str) -> Dict[str, Any]:
"""查询工作流执行结果"""
try:
print(f"查询任务 {task_id} 结果...")
# 简化URL拼接(移除模板字符串,直接格式化)
query_url = f"{self.base_url}/v1/workflows/{self.workflow_id}/run_histories/{task_id}"
resp = requests.get(query_url, headers=self.headers)
if resp.status_code != 200:
raise Exception(f"查询失败: {resp.status_code} | {resp.text}")
result = resp.json()
if result.get('code') != 0:
raise Exception(f"查询结果失败: {result.get('msg')} | {result}")
# 提取核心数据
data = result.get('data', [{}])[0]
exec_status = data.get('execute_status', '')
if exec_status == 'Success':
return self._parse_success_result(data, task_id)
elif exec_status == 'Fail':
return {'status': 'failed', 'error_message': '任务执行失败', 'task_id': task_id}
return {'status': 'processing', 'task_id': task_id}
except Exception as e:
print(f"查询结果异常: {str(e)}")
raise
def _parse_success_result(self, data: Dict[str, Any], task_id: str) -> Dict[str, Any]:
"""内部方法:解析成功的任务结果(拆分复杂的解析逻辑)"""
try:
output = json.loads(data.get('output', '{}'))
result_data = json.loads(output.get('Output', '{}'))
image_url = result_data.get('output')
if not image_url:
return {'status': 'success', 'message': '任务成功但未返回图片', 'task_id': task_id}
local_path = self.download_image(image_url, task_id)
return {
'status': 'success',
'result_image_url': image_url,
'local_image_path': local_path,
'processing_time': data.get('processing_time', 0),
'task_id': task_id
}
except (json.JSONDecodeError, KeyError) as e:
print(f"解析输出失败: {str(e)}")
return {'status': 'success', 'message': '任务成功但解析输出失败', 'task_id': task_id}
if __name__ == '__main__':
try:
coze_api = CozeAPI()
source_path, target_path = './test_source.jpg', './test_target.jpg'
print("开始测试Coze换脸工作流...")
# 运行工作流并获取任务ID
run_result = coze_api.run_workflow(source_path, target_path)
print(f"工作流提交结果: {run_result}")
if run_result.get('code') == 0:
task_id = run_result['data']['task_id']
print(f"任务ID: {task_id}")
time.sleep(20) # 等待任务处理
# 查询结果
result = coze_api.get_workflow_result(task_id)
print(f"任务结果: {result}")
# 精简结果判断逻辑
status_map = {
'success': f"✅ 测试成功!\nURL: {result.get('result_image_url')}\n本地路径: {result.get('local_image_path')}",
'processing': "⏳ 任务仍在处理中",
'failed': f"❌ 任务失败: {result.get('error_message')}"
}
print(status_map.get(result.get('status'), "❌ 未知状态"))
except Exception as e:
print(f"❌ 测试失败: {str(e)}", exc_info=True)
2.2 提示词
根据项目需求: 和项目后端架构文档: 和前端设计图: ,生成智能换脸微信小程序后台Django的项目和代码
要求:
1.项目写入到目录change_face_api中。
2.生成相关表模型,写入到每个app的models中。
3.生成所有接口,并能正常调用。
4.链接数据库地址为:
-host:127.0.0.1
-port:3307
-database:change_face
-user:root
-password:lqz123?
5.Django 后台admin使用django-simpleui美化,项目做好本地化和时区设置。
6.换脸功能对接Coze一键换脸工作流,对接方案参照代码:
-API_KEY:pat_9WJP2Ud93jGw7aOtIGYgjOeVPPQDguCOilyUv6cBWyQtk2akuqAljXxr2sws0AXy
-工作流ID:7536960050292998154
# 1 后面写别的微信小程序也是用这个代码?
-python调用Coze换脸这个代码--》针对于--》我们讲的这个工作流
-上传文件--》执行工作流
-你的工作流没有上传文件--》你的代码比我这个简单
-代码调用工作流,如何写:需要同学会python+官方文档
-https://www.coze.cn/open/playground/workflow_run
-简单粗暴:
-官方文档地址给Trae,让它写
-可能会有bug---》不停的跟他交互--直到能运行
-即便我们没有示例代码--》换脸功能对接Coze一键换脸工作流,对接方案参照官方文档--》也可以实现
-可能会有bug---》需要反复交互--》可能花了一天时间调好了
-我给大家的提示词--》是专业,精准
-生成相关表模型,写入到每个app的models中
-我如何像你一样,写这么精准?
-可以写的不精准--》多交流几次--》最终能达到你的效果
-需要补开发的知识---》搞了17年--》达到现在这个水平---》有ai最快也需要一年时间
-商业软件:必须要懂开发
-接下来就是学习
-Python基础--》买书,网上资料--》黑金壳
-python面向对象
-python并发编程
-numpy,pandas常用模块
-数据库:mysql/oracle
-前端:js,html,css
-Python web框架:django,flask,FastAPI
-高性能:redis,mongodb,时序数据库。。
-Linux:基本操作,nginx
-docker,dockercompose
-git
-微服务,架构
-爬虫:单独方向
-go开发
-java开发
-性能优化。。。。
# 那参照代码和这个python调用代码可以让trae生成吗?
可以
把官方文档+文字描述给它
# 我啥时候能写这种调用代码?提示词写的好,用trae可以搞定吗
# 写提示词时很多术语不懂,补哪些基础知识?
-微信小程序:需要会微信小程序开发:
视频:
https://www.bilibili.com/video/BV1WgQdYNERe/
笔记:
https://pan.baidu.com/s/1VTd6S3rJKQ42MRFPsFwaZQ 提取码: bpxa
-后端:Django 会django框架--》黑金课
# 我现在像个木偶一样,老师讲一下,我动一下,我没有完整的逻辑体系,我稍微补一点这方面的知识,逻辑理解上的知识
2.3 模型思考超长
# 如果超长,点继续即可
2.4 运行后端项目
# 1 提示词
帮我运行后端项目
# 2 运行后,浏览器中打开后端项目
-后端项目:
有API接口--》给微信小程序用的--》先不看
后台管理--》运营用--》能看到小程序有多少用户--》谁做了换脸
- 访问地址: http://127.0.0.1:8000/admin/
-----如果没帮我们生成后台管理的用户名密码,使用提示词生成--------
- 用户名:admin
- 密码:admin123
# 3 帮我生成一个django后台管理用户,用户名是 :lqz,密码是:123456
# 4 我们进入到后台管理看不到其他内容---》继续用提示词让trae编写
- 帮我生成后台管理的用户管理,换脸历史管理等功能
- 我进入后台管理后,依然看不到功能,请帮我检查并修复
2.3 创建超级用户
帮我生成一个django后台管理用户,用户名是 :lqz,密码是:123456
3 小程序概述
3.1 小程序账号注册
# 1 访问【微信公众平台】,注册一个微信小程序账号
-https://mp.weixin.qq.com/
# 2 申请账号需要准备一个邮箱,该邮箱要求:
-未被微信公众平台注册
-未被微信开放平台注册
-未被个人微信号绑定过
-如果被绑定了需要解绑 或 使用其他邮箱
# 3 注册过程中需要微信扫码-->绑定你个人微信--》后续用微信扫码登录







3.2 小程序信息配置
# 1 注册成功后,需要打开微信公众平台对小程序账号进行一些设置
-小程序后续需要 提交审核和上线--》提交审核时,小程序账号信息是必填项
-名称、图标、类目等
-小程序备案和微信认证-->个人可以
-需要时间---》工信部审核--》需要提什么材料,就提什么材料
-只要备案过的小程序,才能在微信小程序中搜到
-如果没备案--》只能最多20个人使用,并且微信小程序中搜不到


3.3 小程序开发流程
# 我们目前使用 Trae开发微信小程序---》本地开发
-微信小程序端--》使用Trae编写代码--》需要运行,看代码运行结果---》【微信开发者工具】
-后端:写好了:Django
-数据库使用本地

3.4 小程序成员
# 微信小程序成员分为两种
-项目成员:表示参与小程序开发(我们)、运营的成员,包括运营者、开发者及数据分析者,项目成员可登陆微信公众后台,管理员可以在成员管理中添加、删除项目成员,并设置项目成员的角色。
-体验成员:表示参与小程序内测体验的成员,可使用体验版小程序,但不属于项目成员。管理员及项目成员均可添加、删除体验成员。
-如果小程序没上线--》你朋友可以用--》只能15个人用-->在他微信上可以用
-备案后:比较严格--》所有互联网用户都可以用


4 创建项目
# 1 不用Trae创建,使用微信开发者工具创建出空项目--》让Trae帮我们写代码
-已有的老项目,Trae能不能帮我们改,加新功能
# 2 下载微信开发者工具
-https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
# 3 一路下一步安装
# 4 双击点开
# 5 创建项目,进入





