首页 > 其他分享 >订单交易平台一

订单交易平台一

时间:2024-10-05 20:44:17浏览次数:6  
标签:... title url redis level .... 订单 交易平台

简介:订单交易平台

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 xxxx
      
      xxxxx.send(...)
      
      # -*- coding: utf-8 -*-
      from tencentcloud.common import credential
      from tencentcloud.sms.v20210111 import sms_client, models
      
      cred = 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.py
    
    ADMIN = [
        {"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对应的name
    
    2. pricepolicy/list/ 配置 ADMIN中的URL   ->默认选中
    
  • 路径导航的问题

    1.获取当前用户请求的 URL   pricepolicy/list/ 或 url对应的name
    
    2.获取上级,展示导航信息
    
    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:123123
    33:123123
    44: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 redis
    
    conn = 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 redis
    
    conn = 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 ThreadPoolExecutor


def task(video_url):
    # 根据视频地址实现刷播放
    # ..
    pass


pool = 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_data
    
    models.Level.objects.create(...)
    
    转换回 /level/list/
    

img

任务B(可选)

  • 发短信

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

img

  • 登录

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

标签:...,title,url,redis,level,....,订单,交易平台
From: https://www.cnblogs.com/Tmars/p/18448457

相关文章

  • “订单、账单、支付单”关系解析
    当交易、支付等体系糅合在一起时,可能会产生许多单据或单号,这个时候,要怎么理解单据在交易正、逆向中的联系?这篇文章里,作者结合设定场景做了解读,或许可以帮你理解“订单、账单、支付单”关系。有朋友提出一个问题比较典型,可能是很多朋友的疑问点:整个交易、支付、清结算、账务......
  • vue3+SpringBoot框架下的中小型生产企业订单管理系统
    目录功能和开发技术介绍具体实现截图开发核心技术介绍:技术创新点vue3和vue2的区别:核心代码部分展示非功能需求分析系统开发流程系统运行步骤软件测试源码获取功能和开发技术介绍本课题拟采用主流的MVC架构、开发工具idea、java语言编程、MySQL数据库技术、Vue.js技......
  • 墙绘产品交易平台:SpringBoot技术实现
    4系统设计墙绘产品展示交易平台的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没有经过全方位考虑,那么系统实现的部分也就无从下......
  • 大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(已更完)Kudu(已更完)Druid(正在更新…)章节内容上节我们完成了如......
  • 基于SpringBoot的墙绘艺术品展示与交易平台
    2相关技术2.1SSM框架介绍本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级别的框架,配置繁琐,不够灵活,修改程序需要修改好多......
  • 构建墙绘产品交易平台:SpringBoot实践
    1绪论1.1研究背景当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。......
  • 彩虹易支付最新版源码及安装教程(修复BUG+新增加订单投诉功能)
    该系统也没版本号,此版本目前是比较新的版本,增加了订单投诉功能,和一个好看的二次元模板。此版本是全开源版,无一处加密文件,系统默认是安装后是打不开的,本站特别修复了BUG文件,在PHP7.4环境下也没问题测试环境:Nginx1.20+PHP7.4+MySQL5.7(官方推荐配置.hp7.1+myqsl5.6)直......
  • 大厂必问 · 如何防止订单重复?
    在电商系统或任何涉及订单操作的场景中,用户多次点击“提交订单”按钮可能会导致重复订单提交,造成数据冗余和业务逻辑错误,导致库存问题、用户体验下降或财务上的错误。因此,防止订单重复提交是一个常见需求。常见的重复提交场景网络延迟:用户在提交订单后未收到确认,误以为订......
  • 【含文档+PPT+源码】基于SpringCloud微服务的船舶交易平台的设计与实现
    项目背景与意义随着全球经济的快速发展,航运业成为国际贸易中不可或缺的一环。船舶交易平台作为航运业的重要组成部分,为船舶买卖、租赁等交易提供了便利和高效的途径。在传统的船舶交易中,买卖双方往往需要通过中介机构来进行交易,这不仅增加了交易的时间和成本,还存在信息不透明......
  • uniapp [安卓苹果App端] - 详细实现手机蓝牙连接打印机及打印票据小票/标签/面单/热敏
    前言网上的教程乱七八糟,文本提供优质示例代码。在uni-appApp端(安卓APP|苹果APP)开发中,详解实现“手机蓝牙连接并使用蓝牙打印机”,uniAppApp端手机使用蓝牙连接打印机进行打印的相关功能,uniapp苹果安卓app实现开启蓝牙并搜索附近范围的蓝牙打印机对接全流程,支持打印......