# 库管系统 **Repository Path**: lalahei/django_review ## Basic Information - **Project Name**: 库管系统 - **Description**: 一个基于Django的本地仓库管理系统 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2022-01-18 - **Last Updated**: 2024-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Django_review [![simpleui](https://img.shields.io/badge/developing%20with-Simpleui-2077ff.svg)](https://github.com/newpanjing/simpleui),select2,django-import-export [toc] ## 介绍 复习Django用的例子 ### 安装教程 1. pip install Django==2.2 1、先编写一个abc.bat文件 内容如下: @echo off python c:\facecon\gysface\manage.py runserver 192.168.0.109:8000 把这个文件存放在你设定的路径,如 c:\abc\bac 2、编写一个vbs文件 内容如下: CreateObject("WScript.Shell").Run"cmd /c c:\abc\bac\abc.bat",0 然后把文件放在win10的启动项目录 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 该程序可以做到开机自启动,后台自动运行python的文件。用户无感。永不停机。开机自动启动。 其实相当于linux里的nohup了。 ### 使用说明 1. 将Django开机启动服务器 1. 将打开浏览器网页做成exe ### 遇到的问题 #### 打印遇到的问题和解决方法 [个人博客](https://blog.csdn.net/lalalheinan/article/details/123087167) #### JS通过判断字符串是0或1 ```javascript var str = "0"; if (str) { console.log(str); } >>> 0 ``` ```javascript var str = ""; if (str) { console.log(1111); } >>> undefined 没有输出结果 ``` 只能判断字符串存不存在 ```javascript '0'==false >>> true "0"==true >>> false "1"==true >>> true "1"==false >>> false ``` #### 浮点数精度问题 **问题:浮点数计算结果有问题导致前端价格跟实际价格、数据库价格不一致** 浮点数精度有问题的有 1. Python3 2. JS ```python 35.12*12 # 421.43999999999994 # 应为421.44 ``` ```javascript 35.12*12 // 421.43999999999994 ``` SQL中没有问题 **数据库中的浮点数精度问题取决于存储引擎,不同的存储引擎会有不同的精度例如,MySQL使用“double precision floating point”字段来存储浮点数,它的精度和范围比较大,因此不会存在浮点数精度的问题。SQLite使用IEEE754标准双精度浮点数来存储数据,其精度为15位,可以保存精度高达1e-15的数值。由于SQLite使用双精度浮点数,因此它可以存储比单精度浮点数更大范围的数据,这也使得它可以存储更多的数据类型,例如日期、时间戳等。** ```sql SELECT 35.12*12 --421.44 ``` ##### 原因 **十进存储方式是二进制**,小数的存储方法是取**小数部分**乘**2(进制)**取整数部分(只有01),循环上个过程直到**整数位为1,且小数位消失**。 ​ 0.1\*2=0.2 0 ​ 0.2\*2=0.4 0 ​ 0.4\*2=0.8 0 ​ 0.8\*2=1.6 1 ​ 0.6\*2=1.2 1 ​ 0.2\*2=0.4 0 ​ 0.4\*2=0.8 0 ​ 0.8\*2=1.6 1 ​ ................... **也就是说有的小数位用二进制表示是二进制的无限循环,无法整除** ##### 解决办法 1. 结账用让数据库运算,数据库没这个问题 2. 要用python使用**decimal**包,如果还满足不了需求用**fractions** 包 3. Django购物车没有存当前商品价格,所以渲染得从模板渲染**一个商品\*数量**,因为浮点数精确度问题导致价格不准,且模板自带的乘除法只对整数运算,浮点数运算得自己写方法[4],有点麻烦。所以直接冲数据库中计算价格,前端用JS更新价格。 4. **JS比较原始** 1. 四舍五入`浮点数.toFixed(保留小数点位数)`,受小数点位数影响不稳定,不是真正的四舍五入`1.335.toFixed(2)==>'1.33' 1.334.toFixed(2)==>'1.33' 1.34.toFixed(1)==>'1.3' 1.35.toFixed(1)==>'1.4'` 2. 将浮点数转化为整数再转化为小数(因为本质上的问题就是二进制表示小数会无限循环),**如果小数点精度太高或者位数太多会导致溢出**,这个项目用到的金钱不会在小数点后两位,`((0.1\*10)+(0.2\*10))/10 ==> 0.3`,**也不是全能用** `35.12*100==>3511.9999999999995 35.12*1000==>35120 35.12*10000==>351200 35.12*100000==>3511999.9999999995` **将浮点数转化为字符串去掉小数点之后拼接在一起最后除100,要保证每个数都是保留两位小数要不然结果会错位** 3. 转化成字符串模拟运算过程 #### 用xlwt只能写不能读,所以做个sheet,商品的行映射 1. 字典存放该商品所在的sheet按商品的id存放,字典存goods的行号。日期的列号。如果没有就新建,字典按value排序。取最后一个。长度为0就是0开始。 ## 改进方向 1. 首页表头不是绝对布局翻页就消失了 2. 商品太多的话一页展示太多,但是又搜索功能 3. 购物车布局不适合手机,是下载的模板他们写死的 4. 单机使用没有局域网内使用 ### 参考 1. [Python浮点数精度问题(包含解决方案)](http://c.biancheng.net/view/5599.html) 2. [Python3 浮点数精度问题](https://blog.csdn.net/haeasringnar/article/details/105471581) 3. [Python获取数字的二进制值](https://www.cnblogs.com/lsgxeva/p/12981209.html) 4. [django模板中做一些基本运算](https://blog.csdn.net/u011181633/article/details/79337369) 5. [Markdown超链接及脚注](https://blog.csdn.net/weixin_33726313/article/details/85861114) 6. [CSDN的markdown编辑器详细使用说明、语法快速索引手册](https://blog.csdn.net/davidhzq/article/details/100904811) 7. [怎么在markdown中使用上标、下标?](https://blog.csdn.net/qq_40147863/article/details/82014166) 8. [windows开机自启动的django服务](https://www.cnblogs.com/duoba/p/10698884.html)