【MK】Python全栈 阶段一:习题汇总 十二:综合项目实战开发:抽奖系统

本文详细介绍了使用Python开发抽奖系统的过程,涵盖了功能模块、代码结构、具体实现和效果展示。主要涉及common模块和storage模块的运用,以及gift.json和user.json的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为博主原创文章,未经博主允许不得转载。



一、功能模块介绍

在这里插入图片描述

二、三大区域介绍

在这里插入图片描述

2.1 common 模块

在这里插入图片描述

2.2 storage 模块/文件夹

在这里插入图片描述

三、代码结构介绍

在这里插入图片描述

四、效果展示

在这里插入图片描述

五、代码实现

5.1 过程

一、Base 类
'''
    1:导入user.json 文件检查
    2:导入gift.json 文件检查
'''

二、
'''
    1. 确定用户表中每个用户的信息字段
    2. 读取 user.json文件
    3. 写入 user.json 文件(检测该用户是否存在),存在不写入——username 不能重名

    username:姓名
    role:权限                 normal(抽奖者) or admin(管理员)
    active:活跃度             True or False(身份是否有效:身份无效,无法进行相关身份的操作)
    create_time:创建时间      timestamp(时间戳)
    update_time:修改时间      timestamp
    gifts []                  记录用户抽过那些奖
    
    username: {username, role, active}
'''

三、
'''
    1. role 的修改
    2. active 的修改
    3. delete_user
    
    username 姓名
    role normal or admin
    active True or False
    create_time timestamp
    update_time timestamp
    gifts []
'''

四、
'''
    1:gifts 奖品结构的确定
    2:gifts 奖品的读取
    3:gifts 添加
    4:gifts 初始化
    {
        # 一级 level
        level1:{
            # 耳机 level
            level1:{
                gift_name_01: {name:xx, count:xx},
                gift_name_02: {name:xx, count:xx}
            },
            level2:{},
            level3:{},
        },
        level2{ 
            level1:{},
            level2:{},
            level3:{}
        },
        level3{ 
            level1:{},
            level2:{},
            level3:{}
        },
        level4{ 
            level1:{},
            level2:{},
            level3:{}
        }
    }
'''

五、添加gifts相关功能:
'''
    1:gifts 修改(数量递减)
    2:gifts  奖品删除
'''

六、admin
'''
    1. admin 类的搭建
    2. 获取用户函数
    3. 添加用户(判断当前用户身份是否是管理员)
    4. 冻结与恢复用户 (只有管理员才可以操作)
    5. 修改用户身份   (只有管理员才可以操作)
    
    注意:只有 normal 用户才可以参加抽奖,admin 只为普通用户提供服务
'''

七、
'''
    1. admin 的验证(只有admin的用户才能用这个类)
    2. 任何函数都应该动态的更新 getuser
    3. 奖品的添加 (只有admin 有这个权限)
    4. 奖品的删除 (只有admin 有这个权限)
    5. 奖品数量的更新(同步base调整) 
'''

八、user
'''
    1.user 类的初始化
    2.get_user(时间的转变)
    3.查看奖品列表
'''

九、user 抽奖
'''
    1. 抽奖函数  随机判断第一层(level1)[1-50]:50%  [51-80]:30%  [81-95]:15%  [96-100]:5%
    2. 抽奖函数  随机判断第二层(level2)[1-80]:80%  [81-95]:15%   [96-100]:5%
    3. 抽奖函数  获取到对应层级的真实奖品,并随机一个奖品,查看奖品count是否为0
                count不为0  中奖,提示用户,并奖品数量 -1,并为用户更新奖品到user表中的gifts中
                count为0,则未中奖
'''

十、课后作业
'''
    1. 防止并发操作 user_json 与 gift_json
    2. 用__gift_update 替代抽奖函数中手动更改奖品数量
    3. 登录体系优化:regist(username,password)
    	    base 获取所有 active 为False的用户 __check_by_active(active)
   			user:get_user  
    		增加难度:password: 111111  ——> hashlib md5  sha1 加密
    4. 每日抽奖次数限制:user_json、count 每次抽奖次数
    		检查抽奖次数函数:check_gift_count
'''

5.2 代码

consts.py

# coding: utf-8

# 本文件:长期使用,并且不会变化的

ROLES = ['admin', 'normal']
FIRST_LEVELS = ['level1', 'level2', 'level3', 'level4']
SECOND_LEVELS = ['level1', 'level2', 'level3']

error.py

# conding: utf-8

class NotPathError(Exception):
    def __init__(self, message):
        self.message = message


class FormatError(Exception):
    def __init__(self, message):
        self.message = message


class NotFileError(Exception):
    def __init__(self, message):
        self.message = message


class UserExistsError(Exception):
    def __init__(self, message):
        self.message = message


class RoleError(Exception):
    def __init__(self, message):
        self.message = message


class LevelError(Exception):
    def __init__(self, message):
        self.message = message


class NegativeNumberError(Exception):
    def __init__(self, message):
        self.message = message


class NotUserError(Exception):
    def __init__(self, message):
        self.message = message

class UserActiveError(Exception):
    def __init__(self, message):
        self.message = message

class CountError(Exception):
    def __init__(self, message):
        self.message = message

utils.py

# coding: utf-8
import os
import time
from .error import NotPathError, FormatError, NotFileError

# 做文件检测
def check_file(path):
    # 判断文件是否存在
    if not os.path.exists(path):
        raise NotPathError('not found %s' % path)

    # 判断文件是否为json文件
    if not path.endswith('.json'):
        raise FormatError('need json format')

    # 判断是不是一个文件
    if not os.path.isfile(path):
        raise NotFileError('this is not file')

# 时间戳转换函数
def timestamp_to_string(timestamp):
    time_obj = time.localtime(timestamp)
    # 把时间对象转成字符串穿
    time_str = time.strftime('%Y-%m-%d %H:%M:%S', time_obj)
    return time_str

gift.json

{
   
   "level1": {
   
   "level1": {
   
   }, "level2": {
   
   "iphone12": {
   
   "name": "iphone12", "count": 299}}, "level3": {
   
   }}, "level2": {
   
   "level1": {
   
   }, "level2": {
   
   }, "level3": {
   
   }}, "level3": {
   
   "level1": {
   
   }, "level2": {
   
   }, "level3": {
   
   }}, "level4": {
   
   "level1": {
   
   }, "level2": {
   
   }, "level3": {
   
   }}}

user.json

{
   
   "dewei": {
   
   "username": "dewei", "role": "admin", "active": true, "create_time": 1627983558
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InitialHeart2021

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值