订单交易平台一

news/2024/12/21 19:56:18/文章来源:https://www.cnblogs.com/Tmars/p/18448457

简介:订单交易平台

img

核心的功能模块:

  • 认证模块,用户名密码 或 手机短信登录(60s有效)。

  • 角色管理,不同角色具有不同权限 和 展示不同菜单。

    管理员,充值客户,下单
    
  • 客户管理,除了基本的增删改查以外,支持对客户可以分级,不同级别后续下单折扣不同。

  • 交易中心

    • 管理员可以给客户余额充值/扣费
    • 客户可以下单/撤单
    • 生成交易记录
    • 对订单进行多维度搜索,例如:客户姓名、订单号。
  • worker,去执行订单并更新订单状态。

1.单点知识

1.1 发送短信

腾讯云短信服务,来进行发送短信。

  • 注册账号

  • 开通服务 + 缴费 (实名、企业认证,公众号

  • API服务、SDK服务

    • API,接口

      import requests# 处理签名和加密
      res = requests.get("......",params={"key":"xxx",'token':'...'})
      
    • SDK,服务

      pip install tencentcloud-sdk-python
      
      import xxxxxxxxx.send(...)
      
      # -*- coding: utf-8 -*-
      from tencentcloud.common import credential
      from tencentcloud.sms.v20210111 import sms_client, modelscred = credential.Credential("AKIDa0B7nhOq3zf5G8l9TMzNVO0MRHrAE3Yn", "4rPincBUYMuCEzUjsdIiuqWv3vYu0qPh")
      client = sms_client.SmsClient(cred, "ap-guangzhou")req = models.SendSmsRequest()req.SmsSdkAppId = "1400455481"
      req.SignName = "Python之路"
      req.TemplateId = "548762"
      req.TemplateParamSet = ["449739"]
      req.PhoneNumberSet = ["+8615131255000"]resp = client.SendSms(req)
      print(resp)
      

1.2 权限和菜单管理

1.2.1 菜单

不同角色的用户登录,看到不同的菜单。

  • 页面写死 HTML模板

    <html>{% if 角色 "管理员"%}<a href="/xxx/x">用户管理</a><a href="/xxx/x">级别管理</a><a href="/xxx/x">级别管理</a>...{% else %}<a href="/xxx/x">xxx管理</a><a href="/xxx/x">级别管理</a>{% endif %}
    </html>
    
  • 将菜单放在配置文件中 (选择

    # settings.pyADMIN = [{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },
    ]USER = [{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },
    ]
    
    <html>{% if 角色 "管理员"%}{% for item in ADMIN%}<a href="{{item.url}}">{{item.title}}</a>{%emdfor%}{% else %}{% for item in USER%}<a href="{{item.url}}">{{item.title}}</a>{%emdfor%}{% endif %}
    </html>
    
  • 将 菜单+角色 写入数据库

    id title url
    1 用户管理 ...
    2 级别管理 ...
    3 订单管理 ...
    id 角色
    1 管理员
    2 用户
    id role_id menu_id
    1 1 1
    2 1 2
    3 2 2
    # 在页面展示数据库
    # 1.查询特定角色关联的所有的菜单# 2.在页面上进行展示
    

如果选择使用配置文件的方式:

  • 菜单,需要显示几个级别的菜单。

    ADMIN = [{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },{"title":"用户管理", "url":"...." },
    ]
    
    ADMIN = [{"title":"用户管理", "children":[{"title":"级别列表","url":"....", "name":"level_list",}{"title":"级别列表","url":"...."}{"title":"级别列表","url":"...."}]},{"title":"订单管理", "children":[{"title":"订单列表","url":"...."}{"title":"订单列表","url":"...."}{"title":"订单列表","url":"...."}]},
    ]
    
  • 菜单选中和展开问题

    1.获取当前用户请求的 URL   pricepolicy/list/ 或 url对应的name2. pricepolicy/list/ 配置 ADMIN中的URL   ->默认选中
    
  • 路径导航的问题

    1.获取当前用户请求的 URL   pricepolicy/list/ 或 url对应的name2.获取上级,展示导航信息3.设置菜单与下级关系
    

扩展:菜单多级关系

id title url parent_id
1 客户管理 null null
2 级别列表 ... 1
3 客户列表 ... 1
4 订单管理 null null
5 价格 ... 4
6 交易 ... 4
7 其他 ... 6

注意:类似与平台的评论。

id content root_id parent_id depth
1 优秀 null null 0
2 不咋样 null null 0
3 确实 1 1 1
4 哈哈 1 1 1
5 你说的都对 1 3 2
- 优秀确实你说的都对哈哈
- 不咋样

1.2.2 权限

权限的判断时,要考虑:正常的点击、非法输入。

v1 = [11,22,33,44]
if 33 in v1:pass
v1 = {11,22,33,44}
if 33 in v1:pass
v1 = {11:123123,22:12312333:12312344:123123
}if 33 in v1:pass
  • 文件settings.py的方式(编写)

    admin_permisions = {"level_list":{...},"level_edit":{..., 'parent':'level_list'},"level_add":{... 'parent':'level_list'},"level_delete":{..'parent':'level_list'.},"user_list":{...},"user_edit":{...},"user_add":{...},"user_delete":{...},
    }user_permisions = {...
    }
    
    admin访问某个URL + 路由信息(name、namespace),获取当前的URL  /level/edit/4/ -> 是否存在URL
    
    在中间件中根据URL中的name进行权限的校验。
    
  • 数据库的方式
    img

1.3 队列

img

  • rabbitMQ,Linux命令+服务构建+python代码。
  • kafka,Linux命令+服务构建+python代码。
  • redis的列表

img

基于redis实现上述的过程和代码示例:

  • 安装redis

  • 启动redis

    win:  https://pythonav.com/wiki/detail/10/82/
    mac:1.去官方下载redis文件2.解压编译3.修改配置文件4.启动
    
  • Python操作redis

    pip install redis
    
    import redisconn = redis.Redis(host='127.0.0.1', port=6379, password='qwe123', encoding='utf-8')# 短信验证码
    conn.set('15131255089', 9999, ex=10)
    value = conn.get('15131255089')
    print(value)
    
    import redisconn = redis.Redis(host='127.0.0.1', port=6379, password='qwe123', encoding='utf-8')# 放值
    # conn.lpush('my_queue', "root")
    # conn.lpush('my_queue', "good")# 取值
    v1 = conn.brpop("my_queue", timeout=5)
    print(v1)
    

1.4 worker和线程池

# 1.去redis中获取任务# 2.再将此订单在数据库中的状态修改为 执行中# 3.获取任务详细: 视频,10000# 4.线程池或协程
from concurrent.futures import ThreadPoolExecutordef task(video_url):# 根据视频地址实现刷播放# ..passpool = ThreadPoolExecutor(50)
for i in range(10000):pool.submit(task, "视频地址")pool.shutdown()  # 卡主,等待所有的任务执行完毕。# 5.更新订单状态,已完成

2.项目

2.1 用户认证相关

  • 用户名和密码登录
  • 短信登录

登录成功后,保存用户的信息session【文件、数据库、缓存中】

2.1.1 用户名和密码

  • 页面展示
  • 提交数据
  • 根据数据去数据库校验
    • 通过,登录成功 session。
    • 失败,页面展示错误信息。

任务A(必选)

  • 编写一个URL

    /level/list/         ->   level_list 函数    ->     查看级别列表(orm查询+模板渲染)添加按钮   /level/add/
    

    img

  • 编写一个URL /level/add/ + Form校验

    /level/add/         ->   函数               -> 输入框form.cleand_datamodels.Level.objects.create(...)转换回 /level/list/
    

img

任务B(可选)

  • 发短信

    1. ajax发送请求+手机号
    2. 调用短信SDK发送短信 91921
    3. 保存到redis中from django_redis import get_redis_connectionconn = get_redis_connection("default")conn.set("18888888","91921")
    

img

  • 登录

    1. ajax请求 + 手机号 + 短信验证码
    2. 校验,登录成功+跳转 /level/list/
    3. 显示错误信息
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习“基于VirtualBox虚拟机安装Ubuntu图文教程”

安装过程中出现了很多问题第一次安装没有下载ubtun20.04 镜像 第二次安装不知道如何下载bzip2,导致一直安装增强功能 第三次在上B站搜索视频讲解后成功安装好了

wintools premium 24.10.1 注册分析

wintools premium 24.10.1 目录wintools premium 24.10.1NAGSCREEN_proc_472350check_472BF0pyps win32 程序,程序注册逻辑简单,关注窗口事件、控件id可快速定位到关键逻辑。 NAGSCREEN_proc_472350 INT_PTR __thiscall NAGSCREEN_proc_472350(void *this, HWND hDlg, UINT a…

项目部署二:服务器和环境配置

2.服务和环境配置 下面的配置和操作均在腾讯云服务器+CentOS 7.5的系统下进行。 2.1 MySQL安装服务端 yum install mariadb-server -y mariadb-server.x86_64 1:5.5.68-1.el7安装客户端 yum install mariadb -y 软件包 1:mariadb-5.5.68-1.el7.x86_64 已安装并且是最新版本服务…

freeRTOS源码解析4--tasks.c 7

4.2.20 空闲任务调用1--prvCheckTasksWaitingTermination 删除所有终止的任务, 释放资源。简单描述就是清空xTasksWaitingTermination列表,释放资源,递减uxCurrentNumberOfTasks和uxDeletedTasksWaitingCleanUp。接口:static void prvCheckTasksWaitingTermination( void )接…

软件工程师课程辅导

Day1 环境搭建下载vscode下载链接:https://pan.baidu.com/s/1Oo1TIrAKmlEuEfdn9EXgLQ?pwd=nkt9配置vscode的python开发环境教程:https://www.runoob.com/python3/python-vscode-setup.html安装Pycharm下载教程:https://blog.csdn.net/qq_44809707/article/details/12250111…

PAIRDISTILL: 用于密集检索的成对相关性蒸馏方法

在当今海量数据时代,有效的信息检索(IR)技术对于从庞大数据集中提取相关信息至关重要。近年来,密集检索技术展现出了相比传统稀疏检索方法更加显著的效果。 现有的方法主要从点式重排序器中蒸馏知识,这些重排序器为文档分配绝对相关性分数,因此在进行比较时面临不一致性的挑战。…

School New Competition WP

试验一下博客园的基础功能,顺便把学校战队招新赛的Wp传一下, alpaca_search: 直接burp爆破把密码搞出来,在burp多抓几次包会在正确的包里发现一个新的cookie名count,count记录了正确的值 ,然后把它改成999再多发几次包,发到正确的那一个后就拿到了flag RCE_ME!!! 题目直…

pytorch环境安装

pytorch环境安装 1.基础安装 首先安装anaconda打开,进入base,输入命令,这里-n后跟的是环境名字,再往后是python版本,不要太高 conda create -n pytorch python=3.8安装的时候有按y的就按y 创建成功后使用下面命令进入创建的环境 conda activate pytorch2.安装需要的库 pip…

[Trick] 格路记数 - 反射容斥

Perface 模拟赛不会被冲烂了。 Problem I 从 \((0,0)\) 到 \((n,m)\) 方案数。 解法: \(C(n+m,m)\)。 Problem II 从 \((0,0)\) 到 \((n,m)\) 方案,但是不能经过 \(y=x+b\) 的直线。 解法: 考虑映射法。 以一条路径第一次碰到直线的位置为起点,之后所有的路线和 \(y=x+b\) …

Burp功能 细解析

情境 第六周的培训甚是有趣, 更加详细的介绍了Burp工具的功能和使用细节. 虽然很有趣, 但是我学得很慢, 练习达到熟练掌握还需要练习. 以下是第五次培训的练习题 以及我的解答. 最后一题手生, 一开始没做出来.1、安装burp,分别在本机上实现全局代理和局部代理,提供设置过程的…

高级语言程序设计第二次作业(102400106刘鑫语)

这个作业属于课程:https://edu.cnblogs.com/campus/fzu/2024C/ 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13282 学号:102400106 姓名:刘鑫语 程序清单 最初都很顺利 3.1 3.2 3.3 3.4 3.5 3.6 出现了问题但一直没能解决,回宿舍后试着改成c99 依然报错,…

快乐数学4弧度

4 弧度 我们大多数人都不知道为什么圆要有 360 度。在学习高等数学或物理时,我们会记住一个神奇的数字--“圆的大小”,并将自己设置为一个 “圆的360度”。 专家们说:“弧度让数学变得更简单!”但却没有简单的理由(涉及泰勒级数的讨论并不简单)。今天,我们将揭开弧度的真…