美多商城
文章平均质量分 77
IT之一小佬
敲响键盘之乐,跳起程序之舞,抵达智慧之巅!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)
MySQL读写分离提示:项目中已经存在非常多的数据库表了,数据量也会逐渐增多,所以我们需要做一些数据库的安全和性能的优化。对于数据库的优化,我们选择使用MySQL读写分离实现。涉及内容包括主从同步和Django实现MySQL读写分离。一、MySQL主从同步1. 主从同步机制1.主从同步介绍和优点在多台数据服务器中,分为主服务器和从服务器。一台主服务器对应多台从服务器。 主服务器只负责写入数据,从服务器只负责同步主服务器的数据,并让外部程序读取数据。 主服务器写入数据后,即原创 2021-08-03 16:55:56 · 457 阅读 · 0 评论 -
项目性能优化(页面静态化2)
商品详情页面静态化提示:商品详情页查询数据量大,而且是用户频繁访问的页面。 类似首页广告,为了减少数据库查询次数,提升页面响应效率,我们也要对详情页进行静态化处理。静态化说明:首页广告的数据变化非常的频繁,所以我们最终使用了定时任务进行静态化。 详情页的数据变化的频率没有首页广告那么频繁,而且是当SKU信息有改变时才要更新的,所以我们采用新的静态化方案。 方案一:通过Python脚本手动一次性批量生成所有商品静态详情页。 方案二:后台运营人员修改了SKU信息时,异步的静态化对应的商原创 2021-08-03 16:31:01 · 356 阅读 · 1 评论 -
项目性能优化(实现页面静态化1)
首页广告页面静态化思考:美多商城的首页访问频繁,而且查询数据量大,其中还有大量的循环处理。问题:用户访问首页会耗费服务器大量的资源,并且响应数据的效率会大大降低。解决:页面静态化1. 页面静态化介绍1.为什么要做页面静态化减少数据库查询次数。 提升页面响应效率。2.什么是页面静态化将动态渲染生成的页面结果保存成html文件,放到静态文件服务器中。 用户直接去静态服务器,访问处理好的静态html文件。3.页面静态化注意点用户相关数据不能静态化: 用户名原创 2021-08-03 16:11:47 · 626 阅读 · 0 评论 -
美多商城之支付(评价订单商品)
评价订单商品提示:点击《我的订单》页面中的《待评价》按钮,进入到订单商品评价页面。一、评价订单商品1. 展示商品评价页面1.请求方式选项 方案 请求方法 GET 请求地址 /orders/comment/ # 订单商品评价 url(r'orders/comment/$', views.OrderCommentView.as_view(), name='comment'),2.请求参数:查询参数参数名 类型原创 2021-08-03 13:12:29 · 717 阅读 · 0 评论 -
美多商城之支付(对接支付宝系统)
对接支付宝系统一、订单支付功能提示:订单支付触发页面:《order_success.html》 和 《user_center_order.html》 我们实现订单支付功能时,只需要向支付宝获取登录链接即可,进入到支付宝系统后就是用户向支付宝进行支付的行为。1.请求方式选项 方案 请求方法 GET 请求地址 /payment/(?P<order_id>\d+)/ 总路由: # payment url(r'^', includ原创 2021-08-02 22:26:15 · 1142 阅读 · 0 评论 -
美多商城之支付(支付宝介绍)
支付提示:如果用户选择的支付方式是 "支付宝" ,在点击《去支付》时对接支付宝的支付系统。支付宝介绍支付宝开放平台入口https://open.alipay.com/platform/home.htm1. 创建应用和沙箱环境1.创建应用2.沙箱环境支付宝提供给开发者的模拟支付的环境。跟真实环境是分开的。 沙箱应用:https://openhome.alipay.com/platform/appDaily.htm?tab=info 沙箱账号.原创 2021-08-02 22:25:39 · 343 阅读 · 0 评论 -
美多商城之订单(我的订单)
三、我的订单1.请求方式选项 方案 请求方法 GET 请求地址 /orders/info/(?P<page_num>\d+)/ # 我的订单 url(r'^orders/info/(?P<page_num>\d+)/', views.UserOrderInfoView.as_view(), name='info'),2.请求参数:路径参数参数名 类型 是否必传 说明 page_num int原创 2021-07-16 14:21:19 · 907 阅读 · 0 评论 -
美多商城之订单(提交订单2)
2.4 使用乐观锁并发下单重要提示:在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。2.4.1. 并发下单问题演示和解决方案解决办法: 悲观锁 【性能比较低,一般不考虑】 当查询某条记录时,即让数据库为该记录加锁,锁住记录后别人无法操作,使用类似如下语法 select stock from tb_sku where id=1 for update;SKU.objects.sele...原创 2021-07-16 08:28:04 · 468 阅读 · 1 评论 -
美多商城之订单(提交订单1)
二、提交订单提示:确认了要结算的商品信息后,就可以去提交订单了。2.1 创建订单数据库表生成的订单数据要做持久化处理,而且需要在《我的订单》页面展示出来。2.1.1. 订单数据库表分析注意:订单号不再采用数据库自增主键,而是由后端生成。 一个订单中可以有多个商品信息,订单基本信息和订单商品信息是一对多的关系。2.1.2. 订单模型类迁移建表from meiduo_mall.utils.models import BaseModelfrom users.m原创 2021-07-15 21:11:57 · 954 阅读 · 2 评论 -
美多商城之订单(结算订单)
订单提示: 订单入口在《购物车》页面的《去结算》。 《去结算》后进入到《结算订单》页面,展示出要结算的商品信息。 一、结算订单1.1.1. 结算订单逻辑分析结算订单是从Redis购物车中查询出被勾选的商品信息进行结算并展示。创建orders子应用:1.1.2. 结算订单接口设计和定义1.请求方式选项 方案 请求方法 GET 请求地址 /orders/settlement/ 总路由:# orders .原创 2021-07-15 20:13:20 · 860 阅读 · 1 评论 -
美多商城之购物车(展示商品页面简单购物车)
三、展示商品页面简单购物车需求:用户鼠标悬停在商品页面右上角购物车标签上,以下拉框形式展示当前购物车数据。3.1. 简单购物车数据接口设计和定义1.请求方式选项 方案 请求方法 GET 请求地址 /carts/simple/ # 展示商品右上角购物车 url(r'^carts/simple/$', views.CartsSimpleView.as_view()),2.请求参数:无3.响应结果:JSON字段 说明 c原创 2021-07-15 16:07:31 · 502 阅读 · 0 评论 -
美多商城之购物车(购物车管理3)
2.5 全选购物车提示:在购物车页面修改购物车使用局部刷新的效果。2.5.1. 全选购物车接口设计和定义1.请求方式选项 方案 请求方法 PUT 请求地址 /carts/selection/ # 全选购物车 url(r'^carts/selection/$', views.CartsSelectAllView.as_view()),2.请求参数:JSON参数名 类型 是否必传 说明 selected bool原创 2021-07-15 14:06:54 · 341 阅读 · 0 评论 -
美多商城之购物车(购物车管理2)
2.3 修改购物车提示:在购物车页面修改购物车使用局部刷新的效果。2.3.1. 修改购物车接口设计和定义1.请求方式选项 方案 请求方法 PUT 请求地址 /carts/ 2.请求参数:JSON参数名 类型 是否必传 说明 sku_id int 是 商品SKU编号 count int 是 商品数量 selected bool 否 是否勾选 3.响应结果:JSON字段原创 2021-07-14 22:39:17 · 327 阅读 · 1 评论 -
美多商城之购物车(购物车管理1)
二、购物车管理2.1 添加购物车提示:在商品详情页添加购物车使用局部刷新的效果。新建carts子应用2.1.1. 添加购物车接口设计和定义1.请求方式选项 方案 请求方法 POST 请求地址 /carts/ 总路由: # carts url(r'^', include('carts.urls', namespace='carts')),子路由:from django.conf.urls import urlfro原创 2021-07-14 19:59:50 · 917 阅读 · 1 评论 -
美多商城之购物车(购物车存储方案)
一、购物车存储方案用户登录与未登录状态下,都可以保存购物车数据。 用户对购物车数据的操作包括:增、删、改、查、全选等等 每个用户的购物车数据都要做唯一性的标识。1.1. 登录用户购物车存储方案1.1.1.存储数据说明如何描述一条完整的购物车记录? 用户itcast,选择了两个 iPhone8 添加到了购物车中,状态为勾选 一条完整的购物车记录包括:用户、商品、数量、勾选状态。 存储数据:user_id、sku_id、count、selected1.1.2.存储位置原创 2021-07-14 11:16:16 · 881 阅读 · 0 评论 -
美多商城之商品(用户浏览记录)
七、用户浏览记录7.1 设计浏览记录存储方案当登录用户在浏览商品的详情页时,我们就可以把详情页这件商品信息存储起来,作为该登录用户的浏览记录。 用户未登录,我们不记录其商品浏览记录。7.1.1. 存储数据说明虽然浏览记录界面上要展示商品的一些SKU信息,但是我们在存储时没有必要存很多SKU信息。 我们选择存储SKU信息的唯一编号(sku_id)来表示该件商品的浏览记录。 存储数据:sku_id7.1.2. 存储位置说明用户浏览记录是临时数据,且经常变化,数据量不大原创 2021-07-11 22:35:59 · 745 阅读 · 0 评论 -
美多商城之商品(商品详情页)
六、商品详情页6.1 商品详情页分析和准备6.1.1. 商品详情页组成结构分析1.商品频道分类已经提前封装在contents.utils.py文件中,直接调用方法即可。2.面包屑导航已经提前封装在goods.utils.py文件中,直接调用方法即可。3.热销排行该接口已经在商品列表页中实现完毕,前端直接调用接口即可。4.商品SKU信息(详情信息)通过sku_id可以找到SKU信息,然后渲染模板即可。 使用Ajax实现局部刷新效果。5.SKU规格信息通过SKU可以原创 2021-07-11 11:25:25 · 2332 阅读 · 2 评论 -
美多商城之商品(商品搜索)
五、商品搜索5.1 全文检索方案Elasticsearch转载 2021-07-10 22:31:46 · 569 阅读 · 4 评论 -
美多商城之商品(商品列表页)
四、商品列表页4.1 商品列表页分析4.1.1. 商品列表页组成结构分析1.商品频道分类已经提前封装在contents.utils.py文件中,直接调用即可。2.面包屑导航可以使用三级分类ID,查询出该类型商品的三级分类数据。3.排序和分页无论如何排序和分页,商品的分类不能变。 排序时需要知道当前排序方式。 分页时需要知道当前分页的页码,且每页五条商品记录。4.热销排行热销排行中的商品分类要和排序、分页的商品分类一致。 热销排行是查询出指定分类商品销量前二的商品。原创 2021-07-09 23:34:03 · 749 阅读 · 6 评论 -
美多商城之商品(首页广告)
三、首页广告首页数据由商品频道分类和广告组成3.1 展示首页商品频道分类3.1.1. 分析首页商品频道分类数据结构{ "1":{ "channels":[ {"id":1, "name":"手机", "url":"http://shouji.jd.com/"}, {"id":2, "name":"相机", "url":"http://www.itcast.cn/"} ], ...原创 2021-07-09 11:04:44 · 681 阅读 · 4 评论 -
美多商城之商品(准备商品数据 )、Dockers容器和FastDFS存储
二、准备商品数据 【这些数据一般保存在第三方云存储服务】提示:数据库表有了以后,我们现在需要准备商品信息数据和商品图片数据,以便查询和展示。 商品信息数据:比如商品编号等都是字符串类型的,可以直接存储在MySQL数据库。 商品图片数据:MySQL通常存储的是图片的地址字符串信息。 所以图片数据需要进行其他的物理存储。 图片物理存储思考:需要提供图片上传和下载的机制。 需要解决图片备份和扩容的问题。 需要解决图片重名的问题等等。图片物理存储方案:FastDFS...转载 2021-07-09 08:51:28 · 960 阅读 · 14 评论 -
美多商城之商品(商品数据库表设计)
一、商品数据库表设计1.1 SPU和SKU在电商中对于商品,有两个重要的概念:SPU和SKU1. SPU介绍 【即为商品的一个概述,一种商品的统称】SPU = Standard Product Unit (标准产品单位) SPU是商品信息聚合的最小单位,是一组可服用、易检索的标准化信息的集合,该集合描述了一个产品的特性。 通俗的讲,属性值、特性相同的商品就可以归类到一类SPU。 例如: iPhone X就是一个SPU,与商家、颜色、款式、规格、套餐等都无关。 ...原创 2021-07-04 15:50:05 · 4286 阅读 · 4 评论 -
美多商城之用户中心(修改密码)
修改密码1. 修改密码后端逻辑提示:修改密码前需要校验原始密码是否正确,以校验修改密码的用户身份。 如果原始密码正确,再将新的密码赋值给用户。class ChangePasswordView(LoginRequiredMixin, View): """修改密码""" def get(self, request): """展示修改密码界面""" return render(request, 'user_center_pass.htm原创 2021-07-03 22:22:12 · 597 阅读 · 0 评论 -
美多商城之用户中心(收货地址3)
三、收货地址3.4 修改地址前后端逻辑1. 修改地址接口设计和定义1.请求方式选项 方案 请求方法 PUT 请求地址 /addresses/(?P<address_id>\d+)/ # 修改和删除地址 url(r'^addresses/(?P<address_id>\d+)/$', views.UpdateDestroyAddressView.as_view()),2.请求参数:路径参数 和 JSON参..原创 2021-07-03 21:54:36 · 655 阅读 · 3 评论 -
美多商城之用户中心(收货地址2)
三、收货地址3.2 新增地址前后端逻辑1. 定义用户地址模型类1.用户地址模型类from meiduo_mall.utils.models import BaseModelclass Address(BaseModel): """用户地址""" user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='addresses', verbose_name='用户') title =原创 2021-07-03 18:09:30 · 616 阅读 · 10 评论 -
美多商城之用户中心(收货地址1)
三、收货地址用户地址的主要业务逻辑有:展示省市区数据 用户地址的增删改查处理 设置默认地址 设置地址标题3.1 省市区三级联动1. 展示收货地址界面提示:省市区数据是在收货地址界面展示的,所以我们先渲染出收货地址界面。 收货地址界面中基础的交互已经提前实现。class AddressView(LoginRequiredMixin, View): """用户收货地址""" def get(self, request): """提供收原创 2021-07-03 13:45:23 · 665 阅读 · 1 评论 -
美多商城之用户中心(添加和验证邮箱)
二、添加和验证邮箱2.1 添加邮箱后端逻辑1. 添加邮箱接口设计和定义1.请求方式选项 方案 请求方法 PUT 请求地址 /emails/ # 添加邮箱 url(r'^emails/$', views.EmailView.as_view()),2.请求参数参数名 类型 是否必传 说明 email string 是 邮箱 3.响应结果:JSON字段 说明 code 状态原创 2021-07-02 18:38:22 · 1988 阅读 · 3 评论 -
美多商城之用户中心(用户基本信息)
一、用户基本信息1.1用户基本信息逻辑分析1. 用户基本信息逻辑分析以下是要实现的后端逻辑用户模型补充email_active字段 查询并渲染用户基本信息 添加邮箱 发送邮箱验证邮件 验证邮箱提示:用户添加邮箱时,界面的局部刷新,我们选择使用Vue.js来实现。1.2 查询并渲染用户基本信息1. 用户模型补充email_active字段 由于在渲染用户基本信息时,需要渲染用户邮箱验证的状态,所以需要给用户模型补充email_active字段 补充完字原创 2021-07-02 13:29:58 · 428 阅读 · 0 评论 -
美多商城之用户登录(QQ登录)
二、QQ登录2.1 QQ登录开发文档QQ登录:即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目。1. QQ互联开发者申请步骤若想实现QQ登录,需要成为QQ互联的开发者,审核通过才可实现。相关连接:http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%852. QQ互联应用申请步骤成为QQ互联开发者后,还需创建应用,即获取本项目对应与QQ互原创 2021-07-02 12:59:18 · 912 阅读 · 1 评论 -
美多商城之用户登录(账号登录)
一、账号登录1.1用户名登录1. 用户名登录逻辑分析原创 2021-06-30 21:33:10 · 1741 阅读 · 1 评论 -
美多商城之验证码(异步方案)
三、异步方案RabbitMQ和Celery3.1 生产者消费者设计模式 【替换之前重写的send_flag代码】思考:下面两行代码存在什么问题?问题:我们的代码是自上而下同步执行的。 发送短信是耗时的操作。如果短信被阻塞住,用户响应将会延迟。 响应延迟会造成用户界面的倒计时延迟。解决:异步发送短信 发送短信和响应分开执行,将发送短信从主业务中解耦出来。思考:如何将发送短信从主业务中解耦出来。生产者消费者设计模式介绍为了将发送短信从主业.原创 2021-06-30 10:50:48 · 426 阅读 · 0 评论 -
美多商城之验证码(短信验证码2)
二、短信验证码2.3 短信验证码后端逻辑1. 短信验证码接口设计1.请求方式选项 方案 请求方法 GET 请求地址 /sms_codes/(?P<mobile>1[3-9]\d{9})/ 2.请求参数:路径参数和查询字符串参数名 类型 是否必传 说明 mobile string 是 手机号 image_code string 是 图形验证码 uuid string 是原创 2021-06-28 21:50:52 · 1683 阅读 · 0 评论 -
美多商城之验证码(短信验证码1)
二、短信验证码2.1 短信验证码逻辑分析知识要点保存短信验证码是为注册做准备的。 为了避免用户使用图形验证码恶意测试,后端提取了图形验证码后,立即删除图形验证码。 Django不具备发送短信的功能,所以我们借助第三方的容联云通讯短信平台来帮助我们发送短信验证码2.2 容联云通讯短信平台1. 容联云通讯短信平台介绍1.容联云官网容联云通讯网址:https://www.yuntongxun.com/ 注册并登陆2.容联云管理控制台3.容联云创建应用原创 2021-06-28 17:10:58 · 751 阅读 · 2 评论 -
美多商城之验证码(图形验证码)
一、图形验证码1.1 图形验证码逻辑分析需要新建应用verifications知识要点将图形验证码的文字信息保存到Redis数据库,为短信验证码做准备。 UUID 用于唯一区分该图形验证码属于哪个用户,也可使用其他唯一标识信息来实现。1.2 图形验证码接口设计和定义1. 图形验证码接口设计1.请求方式选项 方案 请求方法 GET 请求地址 image_codes/(?P[\w-]+)/ 2.请求参数:路径参数参数名 类型原创 2021-06-28 14:29:06 · 852 阅读 · 1 评论 -
美多商城之用户注册(用户注册业务实现)
三、用户注册业务实现3.1用户注册业务逻辑分析1. 用户注册业务逻辑分析3.2 用户注册接口设计和定义1. 设计接口基本思路对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。 设计接口的思路: 分析要实现的业务逻辑: 明确在这个业务中涉及到几个相关子业务。 将每个子业务当做一个接口来设计。 分析接口的功能任务,明确接口的访问方式与返回数据: 请求方法(如GET、POST、PUT、DELETE等)。 请求地址。 请求参数(如路径原创 2021-06-27 23:10:52 · 1012 阅读 · 1 评论 -
美多商城之用户注册(用户模型类)
二、用户模型类2.1定义用户模型类1. Django默认用户认证系统Django自带用户认证系统 它处理用户账号、组、权限以及基于cookie的用户会话。 Django认证系统位置 django.contrib.auth包含认证框架的核心和默认的模型。 django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。 Django认证系统同时处理认证和授权 认证:验证一个用户是否它声称的那个人,可用于账号登录。 授权:授权原创 2021-06-27 17:44:40 · 382 阅读 · 0 评论 -
美多商城之用户注册(展示用户注册页面)
一、展示用户注册页面1.创建用户模块子应用1.1. 创建用户模块子应用1.准备apps包,用于管理所有应用2.在apps包下创建应用users$ cd ~/projects/meiduo_project/meiduo_mall/meiduo_mall/apps$ python ../../manage.py startapp users1.2. 查看项目导包路径重要提示:若要知道如何导入users应用并完成注册,需要知道项目导包路径【这儿可以原创 2021-06-27 17:17:22 · 738 阅读 · 8 评论 -
美多商城之项目准备-工程创建和配置
美多商城之项目准备-工程创建和配置一、创建工程美多商城项目源代码采用远程仓库托管。1. 准备项目代码仓库1.源码托管网站码云(https://gitee.com/) 【国内网站,速度快】2.创建源码远程仓库:meiduo_project【在忽略文件.gitignore中添加 .idea】2. 克隆项目代码仓库1.进入本地项目目录$ mkdir ~/projects # 若在windows中,直接新建就好了$ cd projects/..原创 2021-06-27 16:19:24 · 1392 阅读 · 1 评论 -
欢迎来到美多商城!-项目准备之项目介绍-项目需求分析-项目架构设计
欢迎来到美多商城!【前后端不分离的项目】项目介绍项目需求分析需求分析原因:可以整体的了解项目的业务流程和主要的业务需求。 项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。需求分析方式:企业中,借助产品原型图分析需求。 需求分析完后,前端按照产品原型图开发前端页面,后端开发对应的业务及响应处理。需求分析内容:页面及其业务流程和业务逻辑。提示:我们现在借助示例网站作为原型图来分析需求。1. 项目主要页面介绍1.首页广告2....原创 2021-04-03 00:04:13 · 1955 阅读 · 1 评论
分享