Django开发微信小程序之逆波兰计算器(一) 整体介绍

python-django实现微信小程序登录以及获取用户信息 通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台账号)及本次登录的会话密钥(session_key)等。后端通过拿到前端发送的code进行对官方进行请求,获取openid和session_key。小程序可以通过微信官方提供的登录方法方便地获取微信提供的用户身份标识。code:js_code(前端发送的code)小程序密钥:secret(自己小程序)小程序id:appid(自己小程序) 阅读详情

近端时间接触了微信小程序,决定编写一个迷你计算器的小程序试试水,不试不知道,一试爽到爆。总体而言,微信自带的小程序开发工具,用起来还挺方便的。网上用django开发小程序的完整文章也比较少,于是打算做个笔记。

小程序的结构

整个小程序的结构非常简单,就两个页面:index和cal,其中index页面是欢迎页面,用于获取用户授权;而cal页面就是计算器的主体页面。当用户同意授权后,将自动从欢迎页面跳转到计算页面。

       

开发流程

  1. 在微信公众平台申请小程序开发,需要填写一些个人信息,获取小程序的APPID,网上教程很多
  2. 下载微信开发者工具,建立小程序项目,并阅读小程序开发文档。
  3. 编写小程序的前端页面和后端代码
  4. 在本机测试小程序功能
  5. 在服务器上部署小程序,由于小程序必须使用HTTPS,所以你还要为你的域名申请HTTPS证书
  6. 部署完成且运行正常后,就可以提交小程序代码进行审核,审核通过小程序就可以上线了

小程序的功能

本小程序是一个简易的计算器,可以对正负数,小数进行加减乘除计算,历史记录可以存储3条表达式,用户可以直接点击历史记录自动输入之前计算过的表达式,总体上基于逆波兰算法编写,功能并不复杂。

页面布局

对于计算器的页面布局,主要使用CSS3的弹性盒子布局,可以参考我的笔记https://blog.youkuaiyun.com/zjw_python/article/details/80532823。整体上分为3个部分,显示框区域,数字符号按钮区域和历史记录框部分,代码如下:
html

<!--pages/cal/cal.wxml-->
<view id="welcome"><text>欢迎你:{{nickname}}</text></view>
<view class="cal">
  <view class="input_box"><text>{{value}}</text></view>
  <view class="button_area" bindtap='clickButton'>
    <view class="row">
      <button class="row1-item button_item" data-value="7" hover-stay-time='120'>7</button>
      <button class="row1-item button_item" data-value="8" hover-stay-time='120'>8</button>
      <button class="row1-item button_item" data-value="9" hover-stay-time='120'>9</button>
      <button class="row1-item button_item" data-value="/" hover-stay-time='120'>/</button>
      <button class="row1-item button_item" data-value="back" hover-stay-time='120'>←</button>
    </view>
    <view class="row">
      <button class="row1-item button_item" data-value="4" hover-stay-time='120'>4</button>
      <button class="row1-item button_item" data-value="5" hover-stay-time='120'>5</button>
      <button class="row1-item button_item" data-value="6" hover-stay-time='120'>6</button>
      <button class="row1-item button_item" data-value="*" hover-stay-time='120'>*</button>
      <button class="row1-item button_item" data-value="." hover-stay-time='120'>.</button>
    </view>
    <button class="button_item equal" data-value="=" hover-stay-time='120'>=</button>
    <view class="row short">
      <button class="row1-item button_item" data-value="1" hover-stay-time='120'>1</button>
      <button class="row1-item button_item" data-value="2" hover-stay-time='120'>2</button>
      <button class="row1-item button_item" data-value="3" hover-stay-time='120'>3</button>
      <button class="row1-item button_item" data-value="-" hover-stay-time='120'>-</button>
    </view>
    <view class="row short">
      <button class="row1-item button_item" data-value="0" hover-stay-time='120'>0</button>
      <button class="row1-item button_item brace" data-value="(" hover-stay-time='120'>(</button>
      <button class="row1-item button_item brace" data-value=")" hover-stay-time='120'>)</button>
      <button class="row1-item button_item" data-value="+" hover-stay-time='120'>+</button>
    </view>
  </view>
  <view class="history">
    <view id="text_box">
      <text decode='true'>&nbsp;历&nbsp;史&nbsp;记&nbsp;录</text>
    </view>
    <button id="slide" bindtap="toggle">▼</button>
    <view id="box" class="{{first_click?'show':'hide'}} {{state?'open':'close'}}">
      <view id="item_list" bindtap="clickhistory">
        <view wx:for="{{history}}" data-index="{{index}}">{{item}}</view>
      </view>
    </view>
  </view>
</view>

css

/* pages/cal/cal.wxss */
#welcome{
  font-weight: bold;
  font-style: italic;
  padding: 10rpx;
}
.cal{
  margin: 20% 10%;
  margin-bottom: 0;
  height:700rpx;
  border: 1px solid #ddd;
  background-color: #F5FFFA;
  border-radius: 5px;
}

.input_box{
  height:100rpx;
  width: 90%;
  margin: 30rpx auto;
  font-size: 50rpx;
  line-height: 100rpx;
  text-align: right;
  border: 1px solid #ddd;
  background-color: white;
  border-radius: 3px;
  padding-right: 10rpx;
  overflow: auto;
  white-space: nowrap;
}

.button_area,.history{
  width:90%;
  margin: 0 auto;
}

.row{
  display: flex;
  height:80rpx;
  width:100%;
  justify-content: space-between;
  margin-bottom: 20rpx;
}

.short{
  width:79%;
}

.button_item{
  height:80rpx;
  width:80rpx;
  font-size:60rpx;
  background-color: white;
  text-align: center;
  padding: 0;
  line-height:80rpx;
  border-radius: 3px;
  margin: 0;
}

.brace{
  font-size: 55rpx;
  line-height: 65rpx;
  font-weight: 30rpx;
}

.equal{
  float: right;
  display: inline-block;
  height:180rpx;
  line-height: 180rpx;
}

.history{
  font-size: 60rpx;
  background-color: white;
  border: 1px solid #ddd;
  border-radius: 3px;
  position: relative;
}

#text_box{
  width: 80%;
  height: 100%;
  display: inline-block;
  text-align: center;
}

#slide{
  width: 80rpx;
  height: 86rpx;
  display: inline-block;
  float: right;
  line-height: 80rpx;
  text-align: center;
  font-size: 35rpx;
  padding: 0;
  border-radius: 0px !important;
}

#slide::after{
  border: 0px;
  border-radius: 0px !important;
  border-left: 1px solid #ddd;
}

.button-hover{
    background-color: #B0B0B0;
}

#box{
  width: 100%;
  border-top: 1px solid #ddd;
  overflow: hidden;
  height: 0;
  animation-fill-mode: forwards;
}

#item_list{
    background-color: white;
    width: 100%;
}

#item_list view{
    text-align: right;
    overflow: auto;
    white-space: nowrap;
}

@keyframes slidedown{
    from {
        height: 0;
    }
    to {
        height: 240rpx;
    }
}

@keyframes slideup{
    from {
        height: 240rpx;
    }
    to {
        height: 0;
    }
}

.open{
    animation: slidedown 1s;
}

.close{
    animation: slideup 1s; 
}

.hide{
    display: none;
}

.show{
    display: block;
}

关于历史记录的下拉菜单的制作方法可以参照我的这篇笔记:https://blog.youkuaiyun.com/zjw_python/article/details/80720427


如果觉得这篇文章帮助了您,请打赏一个小红包鼓励作者继续创作哦!!!

在这里插入图片描述

用Django实现微信小程序中的ChatGPT的流式传输 在这篇博客中,我们将介绍如何使用Django框架构建一个服务器端微信小程序,并实现ChatGPT的流式传输。ChatGPT是一个基于GPT-3.5模型的智能对话引擎,能够实现自然语言的交互和智能回复。通过将ChatGPT与微信小程序结合起来,我们可以打造一个功能强大的聊天机器人。 阅读详情

相关推荐

django基于Python的网上点餐微信小程序(程序+开题)

研究目的: 本研究的主要目的是开发一款基于Python的网上点餐微信小程序,通过对系统功能的完善和优化,提高用户的使用体验,满足用户多样化的需求。2)优化系统性能,提高系统的稳定性和可扩展性;研究意义: 本研究旨在开发一款基于Python的网上点餐微信小程序,通过对系统功能的完善和优化,提高用户的使用体验,满足用户多样化的需求。[7] 郭婺, 郭建, 张劲松, 石翠萍, 刘道森, 刘超. 基于Python的网络爬虫的设计与实现[J]. 信息记录材料, 2023, 24 (04): 159-162.

橙蓝毕设程序 1191

Django开发微信小程序之逆波兰计算器(二)计算器实现算法

下面将着重讲解如何实现计算器,使其可以进行小数、负数的加减乘除计算,并显示结果给用户 处理用户输入 用户输入一长串的表达式,里面有数字,有加减乘除符号,有括号,首先我们应该把用户输入的表达式记录下来,并进行适当的划分,将数字和符号分开来,为后续的计算做准备 首先我们在为每个按钮都设置一个data-value自定义属性,从而在后台知道用户按了哪一个键 &amp;amp;lt;view class=&amp;quot;...

zjw_python的博客 1234

Django 微信小程序后台开发指南

在本教程中,我们将学习如何使用 Django 框架开发微信小程序的后台。通过结合 Django 的强大功能和微信小程序的特性,我们可以构建一个稳定、高效的后台服务,为我们的小程序提供数据存储、用户认证和其他必要的功能。让我们逐步进行各个步骤。

JfpBlockchain的博客 868

微信小程序开发之路(十)Django部署服务器&微信小程序第一个计算器项目搭建

1

675

基于Python Django后端和网页爬虫的股票信息服务微信小程序开发

主要牵涉到的技术内容,包括python django后端框架, 后端服务器搭建和部署,python网页爬虫技术,微信小程序开发,等等,是一套从后端到前端的完整流程。

weixin_45512098的博客 2490

微信小程序登录对接Django后端实现JWT方式验证登录详解

先上效果图 点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料。 流程 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3.通过微信接口把code换取成openid 4.后端将openid作为用户名和密码 5.后端通过JSON web token方式登录,把token和用户id传回小程序 6.小程序将token和用户id保存在storage中 下次请求需要验证用户身份的页面时,在header中加入token这个字段 微信小程序代码 获取用户信息的方法这里不展示,可以在微信小程序文档中看到 登录方法 login

django+微信小程序入门实战一:简单计算器

准备环境 微信开发工具 django django端 在服务器安装python3和pip3环境,并安装django pip install django 创建django项目 django-admin startproject weixintest 进入项目 cd weixintest 创建App python manage.py startapp CalculateApi 修改calculator/settings.py文件 # 修改 ALLOWED_HOSTS = [] 为

神薯片 650

msf使用木马控制android手机

使用msfvenom生成木马控制手机

my_name_is_sy的博客 3522

Django之开发微信小程序后端-Django篇②

文章目录3-1 Request&Response对象3-2 Django的RESTful URL设计3-3 实现个人助手功能清单发布 3-1 Request&Response对象 3-2 Django的RESTful URL设计 3-3 实现个人助手功能清单发布 apis\views\menu.py 管理app 在app.js中定义全局接口地址 定义传递的应用数据 // pages/menu/menu.js const app = getApp() Page({ /**

王大阳的博客 7084

ROS2 DDS中间件(图文并茂+超详细)

DDS 的目标场景在端上,致力于使端上的应用可以更容易的进行通信,由于它的完全分布式架构,可以方便的将端上的应用拆分为多进程架构,从而提高端的容错能力。从产品定位角度来讲,它和 Chromium 中的 mojo 都是端上的通信中间件,只不过 mojo 不强调分布式,内部集成了更多的特定于端上的机制,比如句柄的传输,消息的缓存等。但由于 mojo 生于 Chromium,目前官方并没有把它独立出来,所以用起来比较不方便。而 DDS 或许可以在简单的场景下作为 mojo 的替代品。

weixin_39939185的博客 5282

Neo4j LLM知识图谱构建器使用教程

是一个开源应用程序,旨在将非结构化数据(如PDF、文档、文本、YouTube视频、网页等)转换为存储在Neo4j中的知识图谱。该项目利用大型语言模型(如OpenAI、Gemini等)从文本中提取节点、关系及其属性,并通过Langchain框架创建结构化的知识图谱。

u013250861的博客 541

Django开发微信小程序之逆波兰计算器(三)获取用户授权和用户名

本小程序的计算器带有历史记录功能,也就是每个用户都有自己的历史记录,因此需要存储用户信息,用于识别用户,这就少不了获取用户的Openid,这是用户的唯一标识符,除此之外,我们还需要获取用户名及头像信息。 整体的流程为: 用户登录,前端获取到code,将code传给服务器后端 服务器后端用code,AppId和AppSecret到微信指定的API中换取用户Openid,若是新用户,则新建一个用...

zjw_python的博客 1353

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2199

关于Django微信小程序本地模拟测试和真机测试

Django微信小程序后台 模拟测试和真机测试 小程序本地开发调试时需要手机与电脑处在同一局域网下

qq_16543239的博客 777

华为OD机考双机位C卷 - 风险投资计划(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 风险投资计划(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 547

SAP 系统间信任关系配置全攻略:从 SM59 到 SMT1 的实践与风险控制

本文介绍了在SAP系统间配置信任关系的详细流程与最佳实践。文章以SAP Gateway与后端系统架构为场景,从SM59创建RFC目的地开始,到SMT1建立信任关系,再到授权对象S_RFCACL的配置,提供了完整的操作指南。重点包括:使用标准命名规范创建专用RFC连接、通过向导完成系统间信任登记、严格控制S_RFCACL授权范围等。文中还分享了真实项目案例、可复用的检查清单以及常见问题的排查思路,帮助用户实现稳定可靠的跨系统无密码调用,同时确保安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 323

一步一步开发微信小程序(Django+Mysql)

微信小程序

perfectzxiny的博客 4206

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1071

基于django的微信小程序搭建

因为疫情封校被迫关起来,终于有时间整理之前的课程设计。 基于django的微信小程序搭建(不定期记录踩坑日常)开发工具(一)pycharm(二)mysql(三)微信开发者平台(四)IP穿刺 开发工具 (一)pycharm (二)mysql (三)微信开发者平台 (四)IP穿刺 建议直接安装专业版,安装好之后新建工程,打开File->Setting配置开发环境: notes:新建虚拟环境、需要先安装好pip安装包以便于后期使用pip指令进行一些安装第三方库的方便操作 几个pip 常用指令整理: 安装本

m0_45225362的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python django + 微信小程序 商城源码

随着互联网的快速发展,线上购物越来越普及,而商城小程序作为一种便捷的购物方式,正逐渐成为消费者的首选。为了满足市场需求,我们利用Django和微信小程序技术,设计并实现了一个智能商城小程序,旨在为用户提供更加便捷、智能的购物体验。

weixin_47190619的博客 2238

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

django+微信小程序

一、后台用django,前端用原生的微信小程序做完整的前后端的微信小程序。 微信小程序的前端界面: wxml代码: wxss代码: page{ height: 100%; } .container{ height: 100%; display:flex; flex-direction: column; padding: 0; box-sizing: borde...

weixin_43818672的博客 9109

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python-Django毕业设计基于微信小程序的网络办公系统(程序+Lw)

在员工工资管理页面,可以查看索引、工号、姓名、部门、照片、基本工资、全勤奖、其他补助、扣款金额、实发工资、登记日期、是否支付等进行详情、修改、删除、支付等操作,员工工资管理页面如下图所示。员工管理:在员工管理页面,管理员可以对索引、个工号、密码、姓名、性别、部门、职位、手机、邮箱、身份证、相片等信息进行详情、修改、添加员工工资、删除、新增等操作,如下图所示。在员工打卡页面,点击新增,通过输入工号、姓名、性别、相片、手机、考勤类型、打卡时间、打卡备注等信息,点击提交进行员工打卡,员工打卡页面如图5-7所示。

加木计算机毕设程序 354

【DRF+Django】微信小程序入门到实战_day03(下)

# 课程内容 (1)P28_发送短信验证码流程 (2)P29_腾讯云短信使用

qq_40979183的博客 1257

微信小程序 django+uniapp网上药店自助购药系统tz89x

管理员登录系统后,可以对首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能进行相应操作。系统主要包括首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能模块。主要对首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理的实现。商家登录系统后,可以对首页、个人中心、药品信息管理、发票信息管理、订单管理等功能进行相应操作,用户登陆系统后,可以对首页、药品信息、购物车、我的等功能进行详细操作,

QQ58850198的博客 436

微信小程序 res =>的意义及userInfoReadyCallback函数的作用

刚开始接触微信小程序,想写个迷你计算机的小程序,感觉开发挺方便的,当准备使用用户信息时,打算看一下它是怎么获取用户信息的,为之后获取用户openid准备。获取用户信息主要在app.js 和 index.js中 代码中的 res =&amp;amp;amp;amp;gt;可以理解为function(res),其中res即为返回的数据结果对象,不知道又是哪新出的语法规则 app.js App({ onLaunch: fun...

zjw_python的博客 4万+
上一篇: 微信小程序 res =>的意义及userInfoReadyCallback函数的作用
下一篇: 微信小程序CSS3动画下拉菜单
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值