Django开发微信小程序之逆波兰计算器(四)历史记录的获取和保存

Python在线计算器(完整代码) Python实现在线计算器的完整代码。 阅读详情

最后的环节就是历史记录的获取和保存,主要包括以下2个阶段:

  • 计算页面加载时,前端将用户Openid和用户名传给后端,若对应Openid的用户的昵称未保存,则保存用户名,同时传回该用户的计算历史记录
  • 用户每执行一次计算操作,就将一次计算的表达式传给后端保存

首先后端建立模型,用于存储历史记录
models.py

from django.db import models

class User(models.Model):
        openid = models.CharField(max_length=20)
        nickname = models.CharField(max_length=20,default='匿名')
        def __str__(self):
                return self.nickname

class Record(models.Model):
        expression = models.CharField(max_length=100)
        user = models.ForeignKey(User,on_delete=models.CASCADE)
        time = models.DateTimeField(auto_now_add=True)
        def __str__(self):
                return self.expression

前端页面数据中的history和history_value都用于存储后端传来的历史记录表达式,区别在于,history存储的表达式是字符串,用于显示给用户看,而history_value是存储的表达式是数组
cal.js

data: {
    ....
    history:[],
    history_value:[],
    nickname: null
  },

在每一列表项中都加入data-index属性,这样用户点击某一项时,才知道它点击的是哪一个表达式
cal.wxml

<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>

页面加载期间,将用户的Openid和用户名发送给后端,换取该用户的历史记录,并保存到history和history_value中
cal.js

onLoad: function (options) {
      var that = this;
      if (app.globalData.userInfo){
        this.setData({
            nickname: app.globalData.userInfo.nickName
        });
      }
      wx.request({
        url: 'https://www.*****/getData',
        data:{
            openid: app.globalData.openid,
            nickname: this.data.nickname
        },
        success: function(result){
            var data = result.data;
            if (Array.isArray(data) && data.length){
                that.data.history_value = data.map(function(item,index,array){
                    return JSON.parse(item);
                });
                data = that.data.history_value.map(function (item, index, array) {
                    return item.join('');
                });
            };

            that.setData({
                history: data
            });
        }
      })
  },

后端保存用户的用户名,并返回其历史记录
view.py

from django.conf import settings
from django.http import HttpResponse
from .models import User,Record

import urllib,json

def getData(request):
    openid = request.GET.get('openid')
    nickname = request.GET.get('nickname')
    user = User.objects.filter(openid = openid)[0]
    data = []
    if user:
        if not user.nickname:
            user.nickname = nickname
            user.save()
        expressions = Record.objects.filter(user=user).order_by('-time')[0:3]
        if expressions:
            for value in expressions:
                data.append(value.expression)
    data = json.dumps(data)
    return HttpResponse(data)

当用户执行一次计算,若计算结果不为ERROR且不与上一条历史记录相同,则将计算表达式传递给后端保存下来,并更新前端历史记录框
cal.js

// clickbutton事件程序
....
if (!isNaN(result_value) && show_value != history[0]) {  //更新历史记录
            this.save(expression_value);
            var copy = [].concat(expression_value);  //此处创建表达式的副本,是由于表达式是数组
            history_value.unshift(copy);    //而数组在js中为引用型数据结构
            history.unshift(copy.join(''));
            this.setData({
                history: history
            });
        }
...
save: function(expressions){
      wx.request({
        url: 'https://www.*****/saveData',
        data: {
            openid: app.globalData.openid,
            save_data: expressions
        },
        header: {
            'content-type': 'application/json'
        },
        method: 'GET',
        success: function(res){
            if (res.data == 'error'){
              wx.showToast({
                title: '网络错误',
                icon: 'none',
                duration: 1500,
              })
            }
        },
        fail: function(){
          wx.showToast({
            title: '网络错误',
            icon: 'none',
            duration: 1500,
          })
        }
      })
  }

view.py

def saveData(request):
    openid = request.GET.get('openid')
    expression = request.GET.get('save_data')
    user = User.objects.filter(openid = openid)[0]
    if user and expression:
        record = Record(expression=expression,user=user)
        record.save()
        return HttpResponse('ok')
    return HttpResponse('error')

用户点击历史记录中的某条表达式,则将对应的表达式加入ForCustomer和ForCompute中,有一点必须注意,就是要创建表达式数组的副本后,再加入到ForCompute,否则,由于数组是引用类型,后续ForCompute的变化将影响到历史记录中表达式数组
绑定于列表上的事件处理程序
cal.js

clickhistory: function(event){
      var button_value = event.target.dataset.index,
          history = this.data.history,
          history_value = this.data.history_value;
      if (! isNaN(button_value)){
          this.data.expression.ForCustomer = history[button_value].split('');
          this.data.expression.ForCompute = [].concat(history_value[button_value]); //此处创建表达式的副本,是由于表达式是数组
          this.setData({                                              //而数组在js中为引用型数据结构
              value: history[button_value]
          });
      }
  }
})

效果如下:
这里写图片描述

django通过ajax实现的在线计算器程序(界面精美) django通过ajax实现的在线计算器程序(界面精美)。采用bootstrap为前端框架。python版本:3.6.1 django=1.11.17 在windows7下也可用 立即下载

相关推荐

django制作的在线计算器

django开发的在线计算器实例,也可以通过访问http://106.12.16.193:5000/浏览效果

【微信小程序学习笔记】1:开发一个带历史记录功能的四则计算器

端午优快云学院促销,买了微信小程序开发实战跟着学习一下。 混合模式移动应用 微信小程序是一种Hybrid-App(混合模式移动应用),它是介于Native-App和Web-App之间的,更接近前者,但开发成本小很多。 基本结构 pages目录:其内的每个子目录是这个小程序的一个页面,至少应包含wxml和js。 app.js:全局的js。 app.wxss:WXSS是微信对CSS的封装,...

大桔骑士的学习笔记 4064

python的基于django的记录日志系统

django的小课程项目 登陆注册 成功跳转到blog界面查看内容 应用django自带的数据库增删日志 很基础 分享给有需要的的人 代码都能运行 还有文档和截图

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

微信小程序

perfectzxiny的博客 4206

21个微信小程序 部分带有后台 亲测可用

21个微信小程序 部分带有后台 亲测可用

Python实现django开发的在线计算器实例-ComputeDemo

django开发的在线计算器实例,也可以通过访问http://106.12.16.193:5000/浏览效果。 One more thing... Before running this project, you may want to create a super user. Synchronize the Database This project has default settings for the database (it uses sqlite). If you need a super user, you'll need to create one before running the project.

利用Django制作简易计算器(零基础)

在templates文件夹中,我们开一个HTML文件,这里我命名为main.html(这里我的代码有点繁琐,大佬们可以自己缩减一下)在我们创建的app中,找到views.py文件,在其中编写计算器的基本程序(这里我写的也很繁琐,大佬们可以用函数缩减一下)该计算器在计算小数之间的算法时,可能会出现误差,这是由于浮点数二进制与十进制之间的转化导致的,各位大佬可以自己修改一下。在根目录Calculator_System下面,利用终端,我们再创建一个app,这里我命名为Calculator。

nianyiwu的博客 450

基于Django创建卡路里计算器

项目使用Python进行开发,Django 框架为 Web 开发提供内置库。编写模型,添加认证和搜索功能,django管理站点创建,并构建卡路里计算器项目的最终GUI。

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

近端时间接触了微信小程序,决定编写一个迷你计算器的小程序试试水,不试不知道,一试爽到爆。总体而言,微信自带的小程序开发工具,用起来还挺方便的。网上用django开发小程序的完整文章也比较少,于是打算做个笔记。 小程序的结构 整个小程序的结构非常简单,就两个页面:index和cal,其中index页面是欢迎页面,用于获取用户授权;而cal页面就是计算器的主体页面。...

zjw_python的博客 2037

STM32F4系列HAL库配置定时器实验——输入捕获

STM32F4系列HAL库配置定时器实验——输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为 上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器

azs0504的博客 9286

全桥LLC谐振变换器设计与双环控制策略详解

LLC谐振变换器作为高频开关电源的核心拓扑,通过谐振腔实现软开关特性,显著提升转换效率(可达96%以上)。其工作原理基于谐振电感、电容的协同作用,当开关频率接近谐振点时实现ZVS/ZCS。在工业电源、电动汽车充电等场景中,电压电流双环控制策略通过引入电流内环和竞争仲裁机制,有效改善动态响应(实测负载跳变时电压跌落减少60%)。数字控制实现时需注意ADC采样同步和PWM更新时序,而谐振参数测量与温升管理则是工程实践的关键。

weixin_29189987的博客 257

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

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

zjw_python的博客 1353

yolov8的Detect层详解(输出维度改动)

对于部署端需要拿到onnx的output进行后处理,但是基于anchor_free的yolov8输出是1*(4+cls)*8400,不是我们常见的ncwh格式,所以对Detect层进行了学习,分享一下体会。

yjcccccc的博客 2万+

Django学习------使用Django制作一个简易计算器页面

文章预览1、创建Django项目2、views.py文件3、urls.py文件4、html页面5、运行结果 最近在学习Django后台开发,以一个简单的页面来记录一下知识点 1、创建Django项目 项目结构如下 配置服务器 2、views.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from django.http import HttpResponse from django.shortcuts import render # 计算器 def

niulinbiao的博客 2420

Hermes Agent Windows安装教程:本地智能体离线部署实战

本地智能体(Local Agent)是一种运行在用户设备端、无需云端依赖即可响应自然语言指令并自动化执行任务的轻量级AI运行时框架。其核心原理基于配置驱动的任务监听与脚本调用机制,通过服务化驻留实现持续响应能力,技术价值在于保障数据隐私、规避API调用限制、适配内网及老旧系统环境。典型应用场景包括财务报表自动整理、科研仪器数据归档、IT资产变更通知等Windows桌面自动化需求。本文聚焦Hermes Agent这一主流开源实现,围绕Windows平台特有的服务注册、权限模型、杀软拦截、中文路径与YAML编码

weixin_34411563的博客 433

2021-08-20

通过QQ号获取绑定的手机号 导语 偶有奇想,我们可以通过手机号来搜索获取其对应的QQ号,那么,反过来呢? 一.缩小范围 由于手机号属于隐私数据,腾讯QQ并没有直接给出通过QQ号查找对应手机号的接口。 国内的手机号有十一位数字,从数学的角度上来说,包含了1011种可能。如果遍历这1011个数据,通过QQ中手机号查找QQ号的接口来寻找,未免太过费时费力,根据网上查到的资料,同一个QQ号,在十分钟内只能进行30次查询(未验证)。因此,直接遍历的方法不现实。 在这10^13个数据中,包含着大量的可去除的无用数据。我

m0_56063822的博客 4720

Django小实战——在线Web计算器(利用Bootstrap进行前端开发)

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import

Force~ 4465

【问题解决】解决 Python `PermissionError` 权限不足:文件/进程/端口全场景修复

本文总结了Python程序中常见的权限问题及解决方案,包括文件、进程和端口权限错误。文件权限问题通常由文件占用、权限不足或路径错误引起;进程问题多因权限不足或系统限制;端口问题则与端口占用、防火墙或特权端口相关。解决方案提供了详细的代码实现:文件权限管理器类(FilePermissionManager)包含检查权限(check_permission)、修复权限(fix_permission)、安全写入(safe_write)和安全删除(safe_delete)等方法,通过异常处理和临时文件等技术确保操作安全

博客 358

python Django在线计算器

功能:实现在线计算器的功能,可以算加减乘除等等。技术:Python django。pythonDjango在线计算器。前端:html css js。

MYF_12的博客 1万+

5G无人机安全研究综述

国内多所高校提出混合信任模型,南京航空航天大学于2020年提出了起源信息感知的无人机网络信任模型[26],模型基于报文的完整性对报文创建和操作节点的行为评判并生成观测证据,收集证据进行信任评估,识别网络中的恶意节点并进行路由隔离,实现准确的对等信任评估。同时,5G技术的高速率、高可靠性、低时延等特点,能够为无人机提供实时高清图像回传,保证通信网络的稳定,拓展无人机飞控距离限制,丰富了5G无人机的应用场景。5G和无人机技术的融合,丰富了传统无人机的应用服务场景,然而5G无人机仍存在安全隐患。

weixin_70923796的博客 765

第十届MathorCup高校数学建模挑战赛-B题:养老服务床位需求预测与运营模式研究

当养老床位数增加时存在的商机,提出了相应的养老服务床位的运营商业模式。就业的可能性,建立多目标规划模型,尽可能同时满足三方面的要求。务床位的需求、制定合理的养老服务床位发展规划,是构建和谐社会、幸福社会。问题一的床位需求与市场类型的分类结果,查找关于国内养老院的相关数据,探。求,又能持续发展养老事业,同时还能促进社会就业的养老服务床位运营的商业。养老服务床位数的增加能够带来的就业方面因素的影响,并对这些因素进行一个。你们的模型及其结论为科学依据,对政府管理部门针对养老床位规划提出合理的。

getusushu的博客 1139

django制作计算器网页实例,实现前后端数据传输【实测成功】

仅作为记录,大佬请跳过。 感谢b站大佬视频:传送门 文章目录一、建立django项目二、所有源代码三、运行四、展示参考————————————————————————————随笔pycharm的html自动填充快捷键 一、建立django项目 这次博主使用第二种方式windows的命令提示符——建立django项目(之前是使用pycharm专业版建立传送门) 1、在windows的命令提示符里依次输入: e: cd 20210317web\a5djangocalculator django-admin s

weixin_41529093的博客 1981

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python-djangoWEB中间件实现计算器加减功能

为了更方便的理解django的控制流程以下写了一个简单的计算器项目记录全过程方便理解。 创建项目 开启服务这里就赘述了 直接说页面的请求。 1.首先用户请求ip:8000/jisuanqi的url jisuanqi方法 ethan.html界面 from表单跳转到jisuan后 yunsuan方法 计算结果.html的界面 以上就是对django中间价控...

时光凉春衫薄的博客 1069

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

django html计算,django制作的在线计算器

#!/usr/bin/envpython“““Command-lineutilityforadministrativetasks.“““importosimportsysif__name__==“__main__“:os.environ.setdefault(“DJANGO_SETTINGS_MODULE““ComputeDemo.settings“)fromdjango.c...

weixin_39834205的博客 361

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错:接下来就仔细分析一下是如何制作的:简易计算器第一步:导入资源库在过程中使用到了tkinter这个资源库,win+R打开CMD输入:pip install python-tk。python的引入方式为:import tkinter第二步:创建窗口定义窗口并设置窗口标题:# 创建窗口window = tkinter.Tk()...

weixin_39618169的博客 528

python里面的之前打过的记忆信息-python中的记忆:如何缓存函数的运行结果(1)

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。使用称为“memoization”的强大而方便的缓存技术来加速您的Python程序。在这篇文章中,我将向您介绍一种方便的方法来加速你的Python代码,该技术称为memoization (有时拼写为memoisation):Memoization是用作软件优化技术的特定类型的缓存。缓存存储操作的结果以供以后...

weixin_37988176的博客 560
上一篇: Django开发微信小程序之逆波兰计算器(三)获取用户授权和用户名
下一篇: ES6学习笔记1 let 和 const
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值