国外网站顶部菜单设计谈谈网站建设会有哪些问题

news/2025/10/8 17:40:04/文章来源:
国外网站顶部菜单设计,谈谈网站建设会有哪些问题,公司网站建设费如何入账,WordPress怎么做CMS美多商城完整教程#xff08;附代码资料#xff09;主要内容讲述#xff1a;欢迎来到美多商城#xff01;#xff0c;项目准备。展示用户注册页面#xff0c;创建用户模块子应用。用户注册业务实现#xff0c;用户注册前端逻辑。图形验证码#xff0c;图形验证码接口设… 美多商城完整教程附代码资料主要内容讲述欢迎来到美多商城项目准备。展示用户注册页面创建用户模块子应用。用户注册业务实现用户注册前端逻辑。图形验证码图形验证码接口设计和定义。短信验证码避免频繁发送短信验证码。账号登录用户名登录。登录登录开发文档。用户基本信息查询并渲染用户基本信息。收货地址省市区三级联动。收货地址展示地址前后端逻辑。商品数据库表设计SPU和SKU。准备商品数据容器化方案Docker。首页广告展示首页商品频道分类。商品列表页列表页面包屑导航。商品搜索Haystack扩展建立索引。商品详情页统计分类商品访问量。购物车管理添加购物车。购物车管理删除购物车。订单结算订单。提交订单使用乐观锁并发下单。对接系统订单支付功能。页面静态化首页广告页面静态化。MySQL读写分离MySQL主从同步。 全套笔记资料代码移步 前往gitee仓库查看 感兴趣的小伙伴可以自取哦欢迎大家点赞转发~ 全套教程部分目录 部分文件图片 短信验证码 避免频繁发送短信验证码 存在的问题 虽然我们在前端界面做了60秒倒计时功能。但是恶意用户可以绕过前端界面向后端频繁请求短信验证码。 解决办法 在后端也要限制用户请求短信验证码的频率。60秒内只允许一次请求短信验证码。在Redis数据库中缓存一个数值有效期设置为60秒。 1. 避免频繁发送短信验证码逻辑分析 2. 避免频繁发送短信验证码逻辑实现 1.提取、校验send_flag send_flag redis_conn.get(send_flag_%s % mobile) if send_flag:return http.JsonResponse({code: RETCODE.THROTTLINGERR, errmsg: 发送短信过于频繁})2.重新写入send_flag # 保存短信验证码redis_conn.setex(sms_%s % mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code)# 重新写入send_flagredis_conn.setex(send_flag_%s % mobile, constants.SEND_SMS_CODE_INTERVAL, 1)3.界面渲染频繁发送短信提示信息 if (response.data.code 4001) {this.error_image_code_message response.data.errmsg;this.error_image_code true; } else { // 4002this.error_sms_code_message response.data.errmsg;this.error_sms_code true; }pipeline操作Redis数据库 Redis的 C - S 架构 基于客户端-服务端模型以及请求/响应协议的TCP服务。客户端向服务端发送一个查询请求并监听Socket返回。通常是以阻塞模式等待服务端响应。服务端处理命令并将结果返回给客户端。 存在的问题 如果Redis服务端需要同时处理多个请求加上网络延迟那么服务端利用率不高效率降低。 解决的办法 管道pipeline 1. pipeline的介绍 管道pipeline 可以一次性发送多条命令并在执行完后一次性将结果返回。pipeline通过减少客户端与Redis的通信次数来实现降低往返延时时间。 实现的原理 实现的原理是队列。Client可以将三个命令放到一个tcp报文一起发送。Server则可以将三条命令的处理结果放到一个tcp报文返回。队列是先进先出这样就保证数据的顺序性。 2. pipeline操作Redis数据库 1.实现步骤 1. 创建Redis管道 2. 将Redis请求添加到队列 3. 执行请求2.代码实现 # 创建Redis管道pl redis_conn.pipeline()# 将Redis请求添加到队列pl.setex(sms_%s % mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code) pl.setex(send_flag_%s % mobile, constants.SEND_SMS_CODE_INTERVAL, 1)# 执行请求pl.execute()异步方案RabbitMQ和Celery 生产者消费者设计模式 思考 下面两行代码存在什么问题 问题 我们的代码是自上而下同步执行的。发送短信是耗时的操作。如果短信被阻塞住用户响应将会延迟。响应延迟会造成用户界面的倒计时延迟。 解决 异步发送短信发送短信和响应分开执行将发送短信从主业务中解耦出来。 思考 如何将发送短信从主业务中解耦出来。 生产者消费者设计模式介绍 为了将发送短信从主业务中解耦出来,我们引入生产者消费者设计模式。它是最常用的解耦方式之一寻找中间人(broker)搭桥保证两个业务没有直接关联。 总结 生产者生成消息缓存到消息队列中消费者读取消息队列中的消息并执行。由美多商城生成发送短信消息缓存到消息队列中消费者读取消息队列中的发送短信消息并执行。 RabbitMQ介绍和使用 1. RabbitMQ介绍 消息队列是消息在传输的过程中保存消息的容器。 现在主流消息队列有RabbitMQ、ActiveMQ、Kafka等等。 RabbitMQ和ActiveMQ比较 系统吞吐量RabbitMQ好于ActiveMQ持久化消息RabbitMQ和ActiveMQ都支持高并发和可靠性RabbitMQ好于ActiveMQ RabbitMQ和Kafka 系统吞吐量RabbitMQ弱于Kafka可靠性和稳定性RabbitMQ好于Kafka比较设计初衷Kafka是处理日志的是日志系统所以并没有具备一个成熟MQ应该具备的特性。 综合考虑本项目选择RabbitMQ作为消息队列。 2. 安装RabbitMQubuntu 16.04 1.安装Erlang 由于 RabbitMQ 是采用 Erlang 编写的所以需要安装 Erlang 语言库。 # 1. 在系统中加入 erlang apt 仓库$ wget $ sudo dpkg -i erlang-solutions_1.0_all.deb# 2. 修改 Erlang 镜像地址默认的下载速度特别慢$ vim /etc/apt/sources.list.d/erlang-solutions.list# 替换默认值$ deb xenial contrib# 3. 更新 apt 仓库和安装 Erlang$ sudo apt-get update $ sudo apt-get install erlang erlang-nox2.安装RabbitMQ 安装成功后默认就是启动状态。 # 1. 先在系统中加入 rabbitmq apt 仓库再加入 rabbitmq signing key$ echo deb testing main | sudo tee /etc/apt/sources.list.d/rabbitmq.list $ wget -O- | sudo apt-key add -# 2. 更新 apt 仓库和安装 RabbitMQ$ sudo apt-get update $ sudo apt-get install rabbitmq-server# 重启$ sudo systemctl restart rabbitmq-server# 启动$ sudo systemctl start rabbitmq-server# 关闭$ sudo systemctl stop rabbitmq-server3.Python访问RabbitMQ RabbitMQ提供默认的administrator账户。用户名和密码guest、guest协议amqp地址localhost端口5672查看队列中的消息sudo rabbitctl list_queues # Python3虚拟环境下安装pika$ pip install pika# 生产者代码rabbitmq_producer.pyimport pika# 链接到RabbitMQ服务器credentials pika.PlainCredentials(guest, guest) connection pika.BlockingConnection(pika.ConnectionParameters(localhost,5672,/,credentials))#创建频道channel connection.channel()# 声明消息队列channel.queue_declare(queuezxc)# routing_key是队列名 body是要插入的内容channel.basic_publish(exchange, routing_keyzxc, bodyHello RabbitMQ!) print(开始向 zxc 队列中发布消息 Hello RabbitMQ!)# 关闭链接connection.close()# 消费者代码rabbitmq_customer.py import pika# 链接到rabbitmq服务器credentials pika.PlainCredentials(guest, guest) connection pika.BlockingConnection(pika.ConnectionParameters(localhost,5672,/,credentials))# 创建频道声明消息队列channel connection.channel() channel.queue_declare(queuezxc)# 定义接受消息的回调函数def callback(ch, method, properties, body):print(body)# 告诉RabbitMQ使用callback来接收信息channel.basic_consume(callback, queuezxc, no_ackTrue)# 开始接收信息channel.start_consuming()3. 新建administrator用户 # 新建用户并设置密码$ sudo rabbitmqctl add_user admin your_password # 设置标签为administrator$ sudo rabbitmqctl set_user_tags admin administrator# 设置所有权限$ sudo rabbitmqctl set_permissions -p / admin .* .* .*# 查看用户列表sudo rabbitmqctl list_users# 删除用户$ sudo rabbitmqctl delete_user admin4. RabbitMQ配置远程访问 1.准备配置文件 安装好 RabbitMQ 之后在 /etc/rabbitmq 目录下面默认没有配置文件需要单独下载。 $ cd /etc/rabbitmq/ $ wget $ sudo cp rabbitmq.config.example rabbitmq.config2.设置配置文件 $ sudo vim rabbitmq.config# 设置配置文件结束后重启RabbitMQ服务端$ sudo systemctl restart rabbitmq-server配置完成后使用rabbitmq_producer.py、rabbitmq_customer.py测试。 Celery介绍和使用 思考 消费者取到消息之后要消费掉执行任务需要我们去实现。任务可能出现高并发的情况需要补充多任务的方式执行。耗时任务很多种每种耗时任务编写的生产者和消费者代码有重复。取到的消息什么时候执行以什么样的方式执行。 结论 实际开发中我们可以借助成熟的工具Celery来完成。有了Celery我们在使用生产者消费者模式时只需要关注任务本身极大的简化了程序员的开发流程。 1. Celery介绍 Celery介绍 一个简单、灵活且可靠、处理大量消息的分布式系统可以在一台或者多台机器上运行。 单个 Celery 进程每分钟可处理数以百万计的任务。 通过消息进行通信使用消息队列broker在客户端和消费者之间进行协调。 安装Celery $ pip install -U Celery[Celery官方文档]( 2. 创建Celery实例并加载配置 1.定义Celery包 2.创建Celery实例 celery_tasks.main.py # celery启动文件from celery import Celery# 创建celery实例celery_app Celery(meiduo)3.加载Celery配置 celery_tasks.config.py # 指定消息队列的位置broker_url amqp://guest:guest192.168.103.158:5672celery_tasks.main.py # celery启动文件from celery import Celery# 创建celery实例celery_app Celery(meiduo)# 加载celery配置celery_app.config_from_object(celery_tasks.config)3. 定义发送短信任务 1.注册任务celery_tasks.main.py # celery启动文件from celery import Celery# 创建celery实例celery_app Celery(meiduo)# 加载celery配置celery_app.config_from_object(celery_tasks.config)# 自动注册celery任务celery_app.autodiscover_tasks([celery_tasks.sms])2.定义任务celery_tasks.sms.tasks.py # bind保证task对象会作为第一个参数自动传入# name异步任务别名# retry_backoff异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s# max_retries异常自动重试次数的上限celery_app.task(bindTrue, nameccp_send_sms_code, retry_backoff3) def ccp_send_sms_code(self, mobile, sms_code):发送短信异步任务:param mobile: 手机号:param sms_code: 短信验证码:return: 成功0 或 失败-1try:send_ret CCP().send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], constants.SEND_SMS_TEMPLATE_ID)except Exception as e:logger.error(e)# 有异常自动重试三次raise self.retry(exce, max_retries3)if send_ret ! 0:# 有异常自动重试三次raise self.retry(excException(发送短信失败), max_retries3)return send_ret4. 启动Celery服务 $ cd ~/projects/meiduo_project/meiduo_mall $ celery -A celery_tasks.main worker -l info-A指对应的应用程序, 其参数是项目中 Celery实例的位置。worker指这里要启动的worker。-l指日志等级比如info等级。 5. 调用发送短信任务 # 发送短信验证码# CCP().send_template_sms(mobile,[sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], constants.SEND_SMS_TEMPLATE_ID)# Celery异步发送短信验证码ccp_send_sms_code.delay(mobile, sms_code)6. 补充celery worker的工作模式 默认是进程池方式进程数以当前机器的CPU核数为参考每个CPU开四个进程。如何自己指定进程数celery worker -A proj --concurrency4如何改变进程池方式为协程方式celery worker -A proj --concurrency1000 -P eventlet -c 1000 # 安装eventlet模块$ pip install eventlet# 启用 Eventlet 池$ celery -A celery_tasks.main worker -l info -P eventlet -c 1000用户登录 账号登录 未完待续 同学们请等待下一期 全套笔记资料代码移步 前往gitee仓库查看 感兴趣的小伙伴可以自取哦欢迎大家点赞转发~

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

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

相关文章

详细介绍:录制mp4

详细介绍:录制mp4pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Co…

网站联盟如何实现深圳定制网站公司

LeetCode 118 生成杨辉三角(Pascal’s Triangle) 小白渣翻译 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 例子 这里是小白理解 那么这种题目一上来看&#xf…

【OpenGL ES】光栅化插值原理和射线拾取原理

1 前言 ​ 最近在推导光栅化插值公式和射线拾取公式,发现计算过程中有很多共同点,因此将它们放在一篇文章里介绍。具体共同点如下。都引入了四面体模型 都以四面体的三条边作为基向量构建坐标系(非直角坐标系) …

网站移动端推广佛山网站建设熊掌号

只针对不正常的情况才使用异常 异常只应该被用于不正常的条件,它们永远不应该被用于正常的控制流。《阿里手册》中:【强制】Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,比如:Nu…

网站建设职业描述郑州网站免费制作

概述: el-switch 表示两种相互对立的状态间的切换,多用于触发「开/关」。 常见用法: 1、绑定v-model到一个Boolean类型的变量。可以使用active-color属性与inactive-color属性来设置开关的背景色。 2、使用active-text属性与inactive-tex…

塑料机械怎么做网站网站建设协议 模板

尽管 Hexo 支持 MarkDown,但是我们却不能像写单独的 MarkDown 文档时那样肆无忌惮。由于我们所写的文档是需要被解析为静态网页文件的,所以我们必须严格遵从 Hexo 的规范,这样才能解析出条理清晰的静态网页文件。新建文档 假设我们的文章名为…

HTML 速查列表 - 教程

HTML 速查列表 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

Exp1

Experiment 1 实验任务1 1.1 #include <stdio.h> int main() {printf(" O \n");printf("<H>\n");printf("I I\n");printf(" O \n");printf("<H>\n&qu…

20_uv_wsl_installation

windows11 #wsl 在Windows 11 WSL上安装uv的完整指南 概述 uv是由Astral公司开发的现代化Python包管理器和项目管理工具,用Rust编写,提供极快的速度和统一的工具链,可替代pip、pip-tools和virtualenv。 安装方法 方…

学习问题日记-4

在学习Docker时候,安装完所有配置了,配置源使用的是阿里云的,然后在测试安装是否成功时候,执行了一下以下命令: docker run hello-world 结果遇到了以下报错: docker: Error response from daemon: Get "ht…

Codeforces Round 1042 (CF2131) 补题笔记(A-E)

A. Lever 预计难度:红。 考察:语法。 对于所有满足 \(a_i>b_i\) 的下标 \(i\),累计 \(a_i-b_i\) 再加上 \(1\) 就是结果。因为忽略操作 \(1\) 时还迭代了一次所以要加 \(1\)。点击查看代码 #include <bits/st…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI编程助手框架需求探索

本文深入分析了一个专注于提升AI编程助手体验的开源项目,探讨其核心功能定位、应用场景和使用方式,并基于大量用户反馈识别出潜在的创新需求方向,为AI编程工具的未来发展提供参考。内容描述 核心功能定位 该项目是一…

表格数据自动机器学习技术解析

本文介绍了AutoGluon Tabular开源库,这是一个面向表格数据的自动机器学习工具。通过该工具,开发者仅需编写少量代码即可利用深度学习技术构建应用程序,涵盖自动机器学习技术在图像、文本和表格数据集上的应用。Auto…

网站开发 工作量公司网站开发步骤

前面博主写了一篇文章去介绍opentsdb的http接口的使用方法,但是某一些接口的使用还是比较复杂&#xff0c;这篇文章会通过example来详细讲述opentsdb的一些特性。 本文的举的例子有这些&#xff1a; 基本的写入和查询数据的注释和说明子查询查询中的filters使用查询数据的rat…

外链提高网站权重沈阳男科私立医院

普源示波器是一种常用的电子测试设备&#xff0c;它可以测量电路中的电压和电流波形。其中&#xff0c;测量相位差是示波器的一个重要功能&#xff0c;它可以用于分析信号的时间延迟、相位差、频率响应等信息。本文将介绍普源示波器测量相位差的原理和方法&#xff0c;并通过实…

广州定制网站建设毕业设计做网站 答辩会问什么问题

1、添加记录(INSERT)使用SQL语句的INSERT命令可以向数据库中插入记录&#xff0c;INSERT命令的基本形式为&#xff1a;INSERT INTO 表名 [(字段名1,字段名2…)] VALUES (值1,值2,…)若在输入记录时&#xff0c;每个字段均有内容&#xff0c;可省略表名后的字段名。该SQL语句用于…

10/8

Java方法与递归学习实践总结 在Java方法章节的学习中,我最大的收获并非仅仅掌握了语法规则,而是体会到“结构化编程”背后的思维逻辑——用“方法”将复杂问题拆解、复用,用巧劲替代重复的蛮力,这与课件中“懒人造…

2025.10.8

file:///C:/Users/lenovo/Desktop/Java%20%E6%A0%B8%E5%BF%83%E5%9F%BA%E7%A1%80%E5%AE%9E%E9%AA%8C%E6%96%87%E6%A1%A310.8.docx

【QT】QString 与QString区别 - 教程

【QT】QString& 与QString区别 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…