用了五年flask,居然比不过用了五分钟的“它”!

flask(3):不同请求方式获得其参数值 第二种raw里面json体,使用request.get_json()和 request.get_data()来获取参数,区别在于get_json()获取后的数据为dict,get_data()获取的数据为byte数据,request.get_data(as_text=True)获取的byte数据转化为字符串类型数据。新定义一个get方法接口,接口如下。post有两种形式的传参,一种为form-data 或x-www-form-urlendoded形式,另一种为json数据的body体. 阅读详情

有一个非常简单的需求:编写一个 HTTP接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。

如果我们使用 Flask 来开发这个接口,那么代码是这样的:

from flask import Flask, request

app = Flask(__name__)


@app.route('/insert', methods=['POST'])
def insert():
    info = request.json
    name = info['name']
    age = info['age']
    age_after_10_years = age + 10
    msg = f'此人名叫:{name},10年后,此人年龄:{age_after_10_years}'
    return {'success': True, 'msg': msg}

代码看起来已经很简洁了。我们用requests发个请求看看效果,如下图所示:

 

看起来没什么问题。

现在,我搞点破坏,把age字段改成字符串,再运行一下:

 

 

 

不出所料,报错了。

现在我们把age字段改回数字,但是直接移除name字段:

 

 

 

又报错了。

为了防止用户不按规矩提交数据,我们必需在接口里面做好各种异常数据的判断。于是增加判断以后的代码变得复杂了:

@app.route('/insert', methods=['POST'])
def insert():
    info = request.json
    name = info.get('name', '')
    if not name:
        return {'success': False, 'msg': 'name 参数不可省略,不可为空!'}
    age = info.get('age', 0)
AWS RDS PostgreSQL 实战入门:从创建到可连、可读、可扛压 云数据库不是点选即用的黑盒,而是需理解底层原理的可控服务。RDS 的核心价值在于将数据库运维中易出错、反直觉、高风险的环节(如存储可靠性、网络隔离、参数调优、自动备份)封装为标准化能力。以 PostgreSQL 为例,其全托管特性显著降低连接失败、读写异常、突发流量崩溃等典型问题发生概率;结合 Multi-AZ 高可用、gp3 存储弹性扩展与 Performance Insights 深度诊断,可构建兼具稳定性与可观测性的生产级数据底座。本文聚焦真实部署路径,覆盖安全组配置、端口开放、SSL 连接、密码编码 阅读详情

相关推荐

技术人十年成长三重认知跃迁:从能跑、均衡到长期能力

在软件工程实践中,‘技术成长’并非知识的线性堆砌,而是认知结构的持续重构——它始于对代码背后假设的质疑(能跑≠正确),进阶于对系统各维度资源消耗的全局权衡(单点最优≠系统稳定),最终落脚于构建可演进、可验证、可协作的长期能力单元(功能交付≠价值沉淀)。这一过程深刻关联着‘技术生涯’的真实演进逻辑:每一次架构决策、团队协作或文档沉淀,都是对技术价值的重新定义。本文基于十年一线实战,解析工程师如何跨越三道关键分水岭,在真实业务压力下完成从执行者到建设者的质变。

diaozhiwa5526的博客 411

MLOps实战:用MLflow+DVC构建可追溯的模型交付流水线

MLOps并非简单的机器学习自动化,而是面向生产环境的模型全生命周期工程化方法论。其核心在于解决数据漂移、模型复现性差与上线决策无依据三大痛点,通过版本控制(数据/代码/模型)、实验追踪与模型注册表实现端到端可追溯性。本文聚焦真实电商推荐场景,详解如何基于MLflow实现参数、指标、代码与环境的统一记录,利用DVC管理TB级训练数据版本,并设计解耦式轻量模型注册表保障高可用与审计合规。关键技术组合MLflow+DVC+自建Registry,兼顾易用性、稳定性与可扩展性,为AI从Jupyter走向Kubern

turnRound 346

Python为何成为AI与数据科学的工业级首选语言

Python已超越单纯编程语言范畴,演变为AI与数据科学领域事实上的基础设施层。其核心价值源于NumPy的硬件感知内存布局、pandas的零摩擦数据集成能力、PyTorch的动态计算图调试友好性,以及scikit-learn统一接口所降低的认知负荷。这些技术特性共同支撑起从Jupyter交互探索、特征工程、模型训练到FastAPI服务化部署的端到端生产闭环。尤其在时序预测、信贷风控、智能推荐等典型场景中,Python生态通过C扩展实现性能临界点突破,又以高阶抽象屏蔽底层复杂性,使工程师能聚焦于业务逻辑而非环

wyjvip333的专栏 447

C#为何成为2002年开发者的技术破局点

面向对象编程(OOP)作为软件工程核心范式,其落地长期受限于语法抽象与工程实践的鸿沟;GUI开发则因操作系统API复杂、工具链割裂而成为初学者难以逾越的断层。在硬件资源匮乏、教学体系滞后、IDE响应迟缓的早期开发环境中,C#凭借确定性资源管理(using语句)、封装完备的WinForms类库、以及Visual Studio .NET的智能感知与重构能力,将OOP从理论概念转化为可快速验证的工程实践。它不追求语言学上的极致优雅,而是以降低学习成本、缩短反馈周期、规避内存与异常陷阱为技术价值,支撑起桌面应用、课

diaojin6880的博客 401

ML Enabled Applications:构建可运维的机器学习软件产品

机器学习应用(ML Application)本质上是软件工程与统计建模在生产环境中的深度融合。它超越了传统模型训练与部署的概念,强调可观测性、可回滚性、特征一致性与业务指标对齐等工程能力。核心挑战在于应对数据漂移、训练-推理不一致、模型版本与代码版本耦合等现实问题。技术价值体现在将机器学习转化为稳定、低延迟、高可用的服务使能器(Enabled),而非独立模块。典型应用场景包括智能推荐、实时风控、搜索排序等需与业务逻辑深度集成的系统。本文聚焦于ONNX模型交付、特征仓库设计、分层部署策略及三层监控体系等落地关

Hi, Sun 947

金融AI合规生存指南:可解释性、代理偏差与七道治理关卡

金融AI不是通用人工智能的简单迁移,而是受《公平信贷机会法》(ECOA)等强监管约束的决策系统。其核心原理在于将模型输出转化为可验证的法律事实链,技术价值体现在规避天价罚单、降低诉讼风险与提升客户信任。典型应用场景覆盖信贷审批、反洗钱识别、智能投顾等高责任领域,关键挑战是平衡模型性能与可解释性,并根治代理偏差等隐性歧视。本文聚焦Finance场景下真实落地的治理路径,融合SHAP解释生成与代理偏差检测两大实操热词,提供从数据准入到模型监控的闭环方法论。

weixin_34355559的博客 996

Python类型注解实战:从零构建可维护的强类型工程体系

Python类型注解是提升代码可靠性与协作效率的基础工程能力,其本质是通过静态类型声明,在不改变动态语言特性的前提下,为IDE智能补全、mypy静态检查、跨团队接口契约提供确定性支撑。核心原理在于类型提示与类型检查器(如mypy)协同工作,将运行时错误前置到编码阶段。技术价值体现在降低TypeError发生率、缩短新人上手周期、增强单元测试有效性。典型应用场景包括Django/Flask API参数校验、第三方库(pandas/django-stubs)集成、Pydantic数据模型协同及关键路径优先注解策

weixin_34111790的博客 319

机器学习生产化:从Notebook到高可靠AI系统的核心工程实践

机器学习模型上线并非简单封装为API,而是将其嵌入由特征服务、实时推理、监控告警、降级策略与合规审计构成的复杂生产系统。其核心挑战不在算法精度,而在数据漂移检测、特征时效性保障、接口契约治理及决策可追溯性等系统工程能力。真实场景中,90%以上的故障源于特征加载失败、输入类型不一致、重试逻辑失控等集成问题,而非模型本身。因此,构建可观测、可逆、可解释的ML系统,需以业务节奏定义监控窗口、用混沌工程验证韧性、以责任矩阵落实治理,并将模型复杂度让位于可运维性——这才是工业级AI落地的本质。

csdn864883的博客 495

大模型结构化输出三要素:Prompt工程、量化部署与语法约束

大语言模型的结构化输出能力,是连接AI与实际业务系统的关键桥梁。其核心在于理解提示词如何定义任务边界与输出契约,量化技术如何在精度与性能间取得平衡,以及语法约束采样如何保障JSON等格式的100%可解析性。Prompt Engineering解决意图对齐问题,通过角色设定、few-shot示例和显式schema声明提升可控性;模型量化(如Q4_K_M)使7B级模型可在24G显存设备稳定运行;而Grammar-Constrained Sampling则从生成源头锁定合法token序列,杜绝格式污染。这些技术共

weixin_30423977的博客 352

Jina多模态语义搜索实战:从向量检索到生产级神经搜索系统

向量搜索是现代AI应用的核心基础设施,其本质是将文本、图像、音频等异构数据映射至统一语义空间,通过近似最近邻(ANN)算法实现跨模态内容匹配。其技术原理依赖Embedding模型生成高质量向量表示,并以语义相似度替代关键词匹配,显著提升非结构化数据的检索准确率与鲁棒性。该技术在企业知识库、智能客服、工业图纸检索等场景中展现出强大价值,尤其适用于用户提问口语化、术语不规范、数据多源异构的现实业务。Jina作为原生支持多模态与端到端神经搜索的框架,提供了从Document建模、Flow编排到生产可观测性的完整链

weixin_34072637的博客 397

高校数据可视化大屏实战包:Flask后端+ECharts前端,含地理热力图、成绩分析、词云与完整可运行代码

直接上手就能跑的高校数据分析可视化项目,用Python Flask搭后台,ECharts做前端大屏展示。内置学生信息、院校分布、数学英语成绩等真实结构化数据,配套数据清洗(dataWash.py)、自动采集(dataCollect.py)、多维度统计(MathEnglish.py、studentsDataVisualization.py)和地图热力图(mapVisualization.py)、词云生成(worldCloud.py)等功能脚本。首页index.html响应式布局,适配大屏展示;背景.jpg和静

a1b2c3d的博客 201

flask_pydantic:用于扩展真棒pydantic软件包的flask扩展

烧瓶-釜山 Flask扩展,用于将强大的与集成。 安装 python3 -m pip install Flask-Pydantic 基本 validate装饰器验证查询和主体请求参数并使它们可通过两种方式访问​​: 参数类型 request属性名称 询问 query_params 身体 body_params 可以通过validate装饰器的on_success_status参数修改成功响应状态代码。 response_many参数设置为True可启用多个模型的序列化(因此路由功能应返回模型的可迭代性)。 设置为False request_body_many参数可以在请求正文的根级别

【Qt】Qt6系列教程汇总_qt6教程

简介:QT相关电子书、建议和相关参考网址。

2401_87556657的博客 1188

DCA决策曲线的解读和代码实现

0.决策曲线 决策曲线分析法(Decision Curve Analysis,DCA)是个与ROC曲线相提并论的相对比较新的模型评价方法。 关于它的原理,长篇大论的医学统计学知识解读实在不是我的强项,放上两个链接偷偷懒: https://www.plob.org/article/12455.html https://www.iikx.com/news/statistics/1622.html 如果想看文章,这篇里的fig7就是:https://www.ncbi.nlm.nih.gov/pmc/artic

weixin_42960896的博客 1万+

从你的全世界路过---陌陌X-SIGN还原

我们上期介绍了hook 接口方式,今天我分析so 层。学习是为了复杂的事情简单化。不用如此繁琐。跟进native_sdbyecbu37x这个函数,我们f5看伪代码 v13 = sign(v9, v10, v11, a6); 跟进这个函数 代码如下(示例): 2.代码贴入 SHA消息摘要java代码如下: java 代码如下(示例): 总结 算法,结合动态调试!

任雪飘的博客 2303

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 237

多agv系统调度的MATLAB仿真

从起点出发,到货物点领取货物最后到卸货点,以完成任务总时间最短为目标进行单目标优化,约束条件为,任务不冲突,路径不冲突,要能实现路径规避 ,4-6台agv一起工作。左右货架间隔可通过1个agv,上下货架间隔可通过两个agv,通道为双向行驶通道。一台agv只能带一个货物,优化目标为完成任务总的时间最短,agv的速度是匀速,转弯也不会减速,取货物时间为固定值。上面的图里面货物看为正方形跟agv一样的长度大小,agv试做是跟货物一样大小的正方形agv的速度是每秒1个车身。多台agv一起完成...

FPGA/MATLAB学习教程/源码/项目合作开发 7567

二十八.国民技术MCU开发之UID获取与应用

在国民NT MCU中均有一个96位和128位的唯一设备标识符,其中UCID128 位, UID 为 96 位。手册中描述的作用是:通常用来做为序列号或作为密码,在编写闪存时,将此唯一标识与软件加解密算法相结合,进一步提高代码在闪存存储器内的安全性,也可用于激活带安全功能的自举程序(SecureBootloader)。UCID 和 UID,遵守国民技术芯片序列号定义,它包含芯片生产及版本相关信息。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1681

ISMN数据处理

可批量下载,十分方便

m0_46268055的博客 1217

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 211

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 2021年了你还不了解新式类与经典类?
下一篇: Python爬虫——白嫖小说最高境界!
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值