一步一步开发微信小程序(Django+Mysql)
前提:假设你已经安装好Anaconda,微信开发者工具,MySQL数据库,IDE等工具
工具下载地址:
Anaconda:https://www.anaconda.com/download
MySQL:https://dev.mysql.com/downloads/mysql/
微信开发者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html
CodeIDE:VSCode:https://code.visualstudio.com/Download
Pycharm:https://www.jetbrains.com/pycharm/download/?section=windows(可能需要安装学习版)
Postman:https://www.postman.com/downloads/
配置相关环境:
# 创建环境
conda create --name SEClass(替换成自己想设置的名称) python=3.9# 激活环境
conda activate SEClass# 安装库
pip install Django
pip install djangorestframework(API接口开发库)
pip install mysqlclient
MySQL:
假设此时已经安装好mysql客户端
# 登录mysql
mysql -u root -p# 创建项目所使用的数据库(注意名字要符合要求,如不能使用-)
CREATE DATABASE your_database_name;# 进入刚刚创建的数据库
USE your_database_name;# 查看当前所在数据库:
SELECT DATABASE();
连接数据库:(使用数据库管理工具连接,如Navicat Premium)
(Navicat Premium官方下载地址:https://www.navicat.com/en/download/navicat-premium)
连接设置:
本地主机:localhost(或远程数据库主机地址)
端口:3306(默认端口号)
用户名:root(或其它创建的用户名)
密码:(输入你自己在安装mysql的时候设置的密码)
Django:
Django官网:https://www.djangoproject.com
官方教程:https://docs.djangoproject.com/zh-hans/4.2/intro/(墙裂建议跟着敲一遍)
创建项目:
$ django-admin startproject mysite(项目名称,自行设置)
项目结构(创建项目的时候会自动生成基础文件):
-
最外层的
mysite/
根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。 -
manage.py
: 一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 django-admin 和 manage.py 获取所有manage.py
的细节。 -
里面一层的
mysite/
目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如mysite.urls
). -
mysite/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果你是 Python 初学者,阅读官方文档中的 更多关于包的知识。 -
mysite/settings.py
:Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 Django 配置 了解细节。 -
mysite/urls.py
:Django 项目的 URL 声明,就像你网站的“目录”。阅读 URL调度器 文档来获取更多关于 URL 的内容。 -
mysite/asgi.py
:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口。阅读 如何使用 ASGI 来部署 了解更多细节。 -
mysite/wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 如何使用 WSGI 进行部署 了解更多细节。
(使用IDE进行Django项目的配置环境)
项目配置:(在根目录的settings.py中进行配置)
数据库配置:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'class-0912(你创建的mysql数据库名称)','USER': 'root','HOST': 'localhost','PORT': '3306','PASSWORD': '','OPTIONS': {'charset': 'utf8mb4'},}
}
API接口库配置:
INSTALLED_APPS = [...'rest_framework',"rest_framework.authtoken",
]
# 此项需要单独添加在settings.py文件末尾额外增加
REST_FRAMEWORK = {# Use Django's standard `django.contrib.auth` permissions,# or allow read-only access for unauthenticated users.'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'],'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.TokenAuthentication',],
}
url路径配置:
from django.urls import includeurlpatterns = [# 配置后台管理页面path('admin/', admin.site.urls),# 包含应用的URL配置(此时你可能还没有创建your_app)path('your_app_name/', include('your_app_name.urls')),
]
启动项目:
# 默认端口
$ python manage.py runserver (默认端口为8000)# 更换其它端口
$ python manage.py runserver 8080
创建App模块(每个模块实现某项任务,模块设计根据实际需求进行设计):
$ python manage.py startapp your_app_name
设计模型:(在你创建App后,项目文件夹中会出现一个新的App文件夹,其中的model.py为设计模型的地方)
from django.db import modelsclass Reporter(models.Model):full_name = models.CharField(max_length=70)def __str__(self):return self.full_nameclass Article(models.Model):pub_date = models.DateField()headline = models.CharField(max_length=200)content = models.TextField()reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)def __str__(self):return self.headline
激活模型:
#根项目setting.py中修改
INSTALLED_APPS = [...,'your_app_name.apps.TestappConfig',
]
应用数据模型:(设计好模型后,需要进行数据库迁移,此时Django会根据你激活的模型里的设计,自动的创建数据库)
# 每次进行数据库迁移请按顺序执行下列代码
$ python manage.py makemigrations
$ python manage.py migrate
创建一个管理员账号:(输入后按提示进行创建)
python manage.py createsuperuser
在管理站点上注册模型:
your_app_name/admin.py:
from django.contrib import admin# Register your models here.
from .models import Reporter, Articleadmin.site.register(Reporter)
admin.site.register(Article)
编写视图:
视图函数的执行结果只可能有两种:返回一个包含请求页面元素的 [HttpResponse
]对象,或者是抛出 [Http404
]这类异常。至于执行过程中的其它的动作则由你决定。
from django.shortcuts import render
from .models import Articledef year_archive(request, year):a_list = Article.objects.filter(pub_date__year=year)context = {"year": year, "article_list": a_list}return render(request, "news/year_archive.html", context)
规划 URLs:
your_app_name/urls.py:
from django.urls import path
from . import viewsurlpatterns = [path("articles/<int:year>/", views.year_archive),
]
设计模板(可选,微信小程序开发用不太上):
上面的代码加载了 your_app_name/year_archive.html` 模板,可对该模版进行自定义设计
your_app_name/year_archive.html:
{% extends "base.html" %}{% block title %}Articles for {{ year }}{% endblock %}{% block content %}
<h1>Articles for {{ year }}</h1>{% for article in article_list %}<p>{{ article.headline }}</p><p>By {{ article.reporter.full_name }}</p><p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}
编写API接口:
API接口的开发涉及最基础的三个文件:serializers.py(此文件需要你自行创建)、views.py和urls.py
serializers.py:此文件创建你想要进行序列化的模型字段
views.py:此文件创建你想要开发的API接口的试图逻辑,可自行根据业务需求进行设计,如接收GET/POST/PATCH等请求,解析request请求数据,根据请求数据进行业务逻辑设计,设计所需返回的response字段,将response字段根据serializers.py中定义的序列化函数进行序列化,返回API接口的状态码
urls.py:对你开发的API接口的试图进行url路径注册
your_app_name/serializers.py:from rest_framework import serializers
from your_app_name.models import yourModel# 此Serializer返回yourModel模型的指定或全部序列化字段
class myModelSerializer(serializers.ModelSerializer):class Meta:model = yourModelfields = '__all__' # 返回全部或者指定您想要序列化的字段# fields = ['phone_number', 'avatar', 'resume']# 此Serializer返回需要自定义处理的字段,无需被模型字段限制
class customFieldSerializer(serializers.Serializer):old_password = serializers.CharField(required=True)new_password = serializers.CharField(required=True)
your_app_name/views.py:from rest_framework import generics
from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView
from .serializers import mySerializer
from .models import Reporter, Article# 通用View
class myGeneralListView(generics.ListAPIView):queryset = Reporter.objects.all()serializer_class = mySerializer# 自定义View
class articleCustomListView(APIView):# 未做异常处理,请自行完成def get(self, request):articles = Article.objects.all()articles_serializer = ArticleSerializer(articles, many=True)return Response({'articles': articles_serializer.data}, status=status.HTTP_200_OK)
your_app_name/urls.py:from django.urls import path
from .views import CustomListViewurlpatterns = [# path('userlogin/', UserLoginView.as_view(), name='user-login'),# ...其他URL配置...path('article-info/', articleCustomListView.as_view(), name='customlist'),
]
微信小程序:
官网文档:https://developers.weixin.qq.com/miniprogram/dev/framework/
官方教程:https://developers.weixin.qq.com/ebook?action=get_post_info&docid=0008aeea9a8978ab0086a685851c0a(不了解的墙裂建议跟着过一遍)
组件库推荐:Vant Weapp(也可使用其它组件库,详细搜微信小程序组件库)
官方地址:https://youzan.github.io/vant-weapp/#/home(可打开网站扫码查看预览小程序)
#注意:组件库推荐使用npm命令进行构建,使用npm命令需要在环境安装node# 安装 node
Macos端:
# 使用brew命令安装 或 去官网地址下载软件包(同windows端)进行安装
# brew命令的使用需要提前安装,见网址:https://brew.sh
# 终端输入:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"终端输入:brew install nodeWindows端:
# 官网地址下载软件包进行安装:https://nodejs.org/en/download# 检查npm是否安装
npm -v# 通过 npm 安装
npm i @vant/weapp -S --production# 修改 app.json
将创建的微信小程序中的 app.json 中的 "style": "v2" 去除,因为小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱#构建npm项目
npm install# 构建 npm 包
打开微信开发者工具,点击 工具 -> 构建 npm,并勾选 使用 npm 模块 选项,构建完成后,即可引入组件# 引入组件
以 Button 组件为例,只需要在app.json或index.json中配置 Button 对应的路径即可// app.json
"usingComponents": {"van-button": "@vant/weapp/button/index"
}# 使用组件
引入组件后,可以在 wxml 中直接使用组件
<van-button type="primary">按钮</van-button>
相关文章:
一步一步开发微信小程序(Django+Mysql)
前提:假设你已经安装好Anaconda,微信开发者工具,MySQL数据库,IDE等工具 工具下载地址: Anaconda:https://www.anaconda.com/download MySQL:https://dev.mysql.com/downloads/mysql/ 微信开…...

mysql 讲解(1)
文章目录 前言一、基本的命令行操作二、操作数据库语句2.1、创建数据库2.2、删除数据库2.3、使用数据库2.4 查看所有数据库 三、列的数据类型3.1 字符串3.2 数值3.3 时间日期3.4 空3.5 int 和 varchar问题总结: 四、字段属性4.1 UnSigned4.2 ZEROFILL4.3 Auto_InCre…...
k8s关于metadata、spec.containers、spec.volumes的属性介绍(yaml格式)
目录 一.metadata常用属性 二.spec.containers子属性介绍 explain pod.spec.containers给出的参考 1.command示例演示 2.env和envFrom示例演示 3.ports部分详解 4.resources部分详解 5.startupProbe格式演示 6.terminationMessagePath和terminationMessagePolicy格式演…...

腾讯域名优惠卷领取
腾讯域名到到期了,听说申请此计划,可获得优惠卷,看到网上5年域名只需要10元,姑且试试看。 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?in…...

elastic-job 完结篇
一 elastic-job 1.1 案例场景分析 1.设置4个分片,10秒执行一次。 分片弹性扩容缩容机制测试: 测试1:测试窗口1不关闭,再次运行main方法查看控制台日志,注意修改application.properties中的 server.port…...

基于 Gin 的 HTTP 代理 demo
上次用 TCP 模拟了一个 HTTP 代理之后,感觉那样还是太简陋了,想着是不是可以用框架来做一个有点实际用处的东西。所以,就思索如何用 golang 的 Gin 框架来实现一个?嗯,对的你没有听错,是 gin 框架。你可能会…...

【ATTCK】MITRE Caldera - 测试数据泄露技巧
CALDERA是一个由python语言编写的红蓝对抗工具(攻击模拟工具)。它是MITRE公司发起的一个研究项目,该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的,能够较真实地APT攻击行为模式。 通过CALDERA工具,安全…...

【数据结构】树与二叉树(十二):二叉树的递归创建(算法CBT)
文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...
Qt绘制网格和曲线
绘制网格: void Widget::drawGrid(QPainter &p, QRect &windRect) {QRect rect(windRect.left()m_margins.left(),windRect.top()m_margins.top(),windRect.width()-m_margins.left()-m_margins.right(),windRect.height()-m_margins.top()-m_margins.bo…...
2023-11-12
今日比较摆烂, 但是把自写管道的原理搞懂了, 主要是把 exp 完完全全看懂了, 还不错. 然后就没干啥了. 明日计划: 学校的作业. AFL 源码. 我真是服了我自己了, AFL 源码搁多久了, 操操操 然后把 seccomp 重新学习下...

[工业自动化-16]:西门子S7-15xxx编程 - 软件编程 - 西门子仿真软件PLCSIM
目录 前言: 一、PLCSIM仿真软件 1.1 PLCSIM仿真软件基础版(内嵌) 1.2 PLCSIM仿真软件与PLCSIM仿真软件高级版的区别? 1.3 PLCSIM使用 前言: PLC集成开发环境是运行在Host主机上,Host主机与PLC可以通过…...

运行npm install卡住不动的几种解决方案
在前端开发经常会遇到运行npm install 来安装工具包一直卡住不动,为此这里提供几种解决方案,供大家参考学习,不足之处还请指正。 第一种方案、首先检查npm代理,是否已经使用国内镜像 // 执行以下命令查看是否为国内镜像 npm con…...

[Android]_[初级]_[配置gradle的环境变量设置安装位置]
场景 在开发Android项目的时候, gradle是官方指定的构建工具。不同项目通过wrapper指定不同版本的gradle。随着项目越来越多,使用的gradle版本也增多,导致它以来的各种库也增加,系统盘空间不足,怎么解决? 说明 grad…...

docker更改存储目录原因及方案
为什么一定要将docker的存储目录挂载到其他目录 docker在安装时默认存储目录在/var/lib/docker,而该目录是在系统盘下的。docker安装后,会使用各种各样的镜像,动辄几个G,那么如此多的镜像文件,装着装着系统盘就撑爆了…...

HTTPS的工作流程
. HTTPS是什么? https是应用层中的一个协议,是在http协议的基础上引入的一个加密层。 为什么需要HTTPS 由于http协议内容都是按照文本的方式明文传输的,这就导致传输过程中会出现一些被篡改的情况。运营商劫持事件最开始百度,…...

C++语言的广泛应用领域
目录 1. 系统级编程 2. 游戏开发 3. 嵌入式系统 4. 大数据处理 5. 金融和量化分析 6. 人工智能和机器学习 7. 网络和通信 结语 C是一种多范式编程语言,具有高性能、中级抽象能力和面向对象的特性。由Bjarne Stroustrup于1979年首次设计并实现,C在…...

Lambertian模型(完美漫反射)
这里使用相乘的方式组合光照色和纹理色。根据这个模型,面朝光源的区域光照强度高,纹理色也相应增强。面背光源的区域光照弱,纹理色也被抑制。这样通过光照和纹理的结合,可以合成出具有照明效果的面部颜色,而不仅仅是固定的纹理本身的颜色。相乘方式可以近似实现不同光照方向下面…...

MATLAB的编程与应用,匿名函数、嵌套函数、蒙特卡洛法的掌握与使用
目录 1.匿名函数 1.1.匿名函数的定义与分类 1.2.匿名函数在积分和优化中应用 2.嵌套函数 2.1.嵌套函数的定义与分类 2.2.嵌套函数彼此调用关系 2.3.嵌套函数在积分和微分中应用 3.微分和积分 4.蒙特卡洛法 4.1.圆周率的模拟 4.2.计算N重积分(均匀分布&am…...

NFS服务器的搭建
架设一台NFS服务器,并按照以下要求配置 准备阶段:准备两台虚拟机,一台作为服务端,一台作为客户端 服务端(Server):192.168.75.139 客户端(Client):192.168.75.160 两…...
安卓Frida 常用脚本
打印调用堆栈, hook 某个方法,想看下调用堆栈,代码如下: function showStacks() {Java.perform(function () {send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));});} 二,需要hook okhttp3 HttpUrl …...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...