积分机

Python基础教程Web项目抽

发布时间:2022/11/3 13:55:04   

五一放假了,安排出外游玩的,自有一番快乐,没有外出游玩的同学们,让我们一起做基于django的web项目开发一个简单的抽奖功能吧,要知道抽奖活动在公司各业务线上可是使用十分广泛的哦~

图片来自网络,幸不幸运,就看你的了

一、明确需求

论起抽奖,其实也挺简单的,无非就那么几种,抽实物、抽积分,然后有一定的概率中奖,我们对本次五一活动的抽奖需求做如下设定:

奖品池中有五种奖品,从高到低依次是:一等奖预算元,奖品手机共1部,二等奖预算元,空气净化器共2部、三等奖预算元,手机耳机共10部,鼓励奖,再抽一次,感谢参与奖,无奖品。总预算9元,预留元活动预备资金,本次抽奖总预算不得超过1万元。如因为人为责任造成费用超出,超出部分从责任员工工资中扣除,如预备资金元未消费,纳入团建费用。每人每天只能抽1次奖,包括鼓励奖在内,每日累计抽奖最多2次,除此之外任何情况下均不得多抽。抽奖中奖之后向用户发送手机短信,告知用户在朋友圈分享中奖页面后奖品邮递包邮,未分享时用户付邮费5月7日起逐次发货,发完为止,预计5个工作日完成奖品发货不得让用户掌握抽奖概率用户每次抽奖信息全程保存备查为了避免广告的嫌疑,我在这里不列出具体的商品型号,在实践中,我们要抽的奖品肯定是有具体的型号的,比如手机,你现在抽个iPhone11是可以的,但是你抽个iPhone3GS明显就不靠谱了。

二、数据准备

计划设计5张表,也就是5个数据模型:

奖品表,存储奖品的基本信息抽奖规则表,定义抽奖规则,重点:控制住每个物品的抽奖次数,不能多抽抽奖日志表,记录每个用户的抽奖过程,每个用户每天只能抽1次,包括鼓励奖,最多2次兑现信息表,奖品信息,收货人,发货进度等。

数据模型定义

奖品预先也放在数据库中了:

奖品清单

三、核心逻辑

图片来自网络,抽奖开始啦

我们从用户的角度设计系统的功能:

刚进入页面的时候,提示可抽奖点击抽奖,转盘开始转30秒转盘结束,显示抽奖结果抽奖结果显示出来之后,如果没中奖,感谢参与,如果是鼓励奖,可再抽一次,如果抽中奖品,让用户填写兑奖的收件人姓名、收件人电话、收件人地址。整个抽奖过程必须处于登录状态才能进行,不登录不能抽奖,一天抽过之后,再次进来仍然不能再抽奖其实也挺简单的,我说一下系统设计实现思路:

点击开始抽奖,调接口,保存用户抽奖状态转盘结束,调接口,获取抽奖结果是否可再抽一次,由客户端判断逻辑用户是否登录,使用中间件实现登录用户不能重复抽奖,在后端判断本例旨在介绍系统设计与开发思想,所以系统的页面不会设计的很炫丽,只是照着抄了Bootstrap的样式框架。所有页面都使用了统一的一个部署,大家自己开发的时候可以设计的好一些。

实现步骤:

首页,显示抽奖按钮,如果没登录,不显示抽奖按钮,显示登录按钮点击抽奖,调后端开始抽奖接口,在当前页转盘开始转30秒30秒之后,调后端抽奖完成接口,显示抽奖结果简单吧,看看我写的view:

视图上的业务逻辑

抽奖页面模板代码:

到这一步,我们的抽奖功能就做出来了。是不是很简单呢?

待解问题:

本文通过一个简单的例子,写出一个节日抽奖活动的产品功能,但是因为时间和篇幅关系,我们不可能在这里说的太细,至少还有下面的问题,需要大家自己再想办法:

现在的抽奖页面太丑了,但是大家只需要再接入一个漂亮的UI就好了,不影响我们的业务逻辑并发量比较高时,抽奖仍然有可能突破限制,这需要使用分布式锁去解决,用Redis或zookeeper都可以节日活动通常都会有分享优惠,也就是用户分享了,或者邀请新人进来了,根据规则可以再抽,但是要防止刷单待解的这些问题大家可以查阅资料再研究哦,有问题也可以留言,我们一起再探讨。

本文相关代码已经在Github上了,但是正文不能放链接,大家在评论区联系吧。



转载请注明:http://www.aideyishus.com/lkgx/2242.html
------分隔线----------------------------