制作登录时的验证码 : django开发之天天生鲜项目知识总结【6】

分享46个Python源代码总有一个是你想要的 阅读详情

小白~我只是介绍一种简单的验证码

  • 首先我们需要下载一个模块 Pillow
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Pillow==3.4.1
  • 下面直接上代码就可以了,在网上可以找到很多。
from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO

# /verify_code
def verify_code(request):
    #引入随机函数模块
    import random
    #定义变量,用于画面的背景色、宽、高
    bgcolor = (random.randrange(20, 100), random.randrange(
        20, 100), 255)
    width = 100
    height = 25
    #创建画面对象
    im = Image.new('RGB', (width, height), bgcolor)
    #创建画笔对象
    draw = ImageDraw.Draw(im)
    #调用画笔的point()函数绘制噪点
    for i in range(0, 100):
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)
    #定义验证码的备选值
    str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
    #随机选取4个值作为验证码
    rand_str = ''
    for i in range(0, 4):
        rand_str += str1[random.randrange(0, len(str1))]
    #构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”
    font = ImageFont.truetype('FreeMono.ttf', 23)
    #构造字体颜色
    fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
    #绘制4个字
    draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
    draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
    draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
    draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
    #释放画笔
    del draw
    #存入session,用于做进一步验证
    request.session['verifycode'] = rand_str
    #内存文件操作
    buf = BytesIO()
    #将图片保存在内存中,文件类型为png
    im.save(buf, 'png')
    #将内存中的图片数据返回给客户端,MIME类型为图片png
    return HttpResponse(buf.getvalue(), 'image/png')
  • 写好视图之后,配置urls.py
url(r'^verify_code$', views.verify_code, name='verify'),

然后,在对应前端页面上,post表单中加上这个生成的验证码图片:
在这里插入图片描述

  • 下面进行登录判断,验证码是否正确:
# 获取用户输入的验证码
        vcode1 = request.POST.get('vcode')
        # 获取生成的验证码
        vcode2 = request.session.get('verifycode')  # 这个是生成验证码时,保存到sesion里面的。

#  校验验证码是否相同
        if vcode1 != vcode2:
            # 验证码错误
            return render(request, 'register.html', {'errmsg': '验证码不正确'})
  • 就可以看到效果了~:比较简陋
    在这里插入图片描述
  • 当输入错误验证码时:
    在这里插入图片描述
天天生鲜项目源码 天天生鲜项目完整源码,用django框架进行编写的,适合新手用来研究 立即下载

相关推荐

Python天天生鲜项目代码及部署文件

压缩包里包含使用Python语言下的django框架编写的天天生鲜项目,为了方便使用,里面有写好的部署文档。可以根据部署文件的内容进行项目搭建。

django天天生鲜项目部署总结

部署环境:谷歌云vps/Ubuntu18.04.5/宝塔面板 额外用到的生产环境:miniconda/django3.1/python3.6/celery/redis/mysql/fastdfs/nginx/uwsgi 前期工作: 注册域名、买服务器、备案(国内服务器),申请ssl证书 1. 配置服务器 1.1. vps开启http、https流量,配置防火墙开放所有端口或者使用到的端口 例如:stmp邮件服务器:25、465(ssl) fastdfs:221...

m0_37871461的博客 534

天天生鲜商城项目

这是一个垂直电商,只针对生鲜水果的一个电商平台 下发页面 实现功能:首页、列表页、展示页、购物车、订单、用户登录注册、用户中心

天天生鲜项目经验

一、项目架构 前端: 用户相关 商品相关 购物车相关 订单相关 后台管理 后端: 用户模块 商品模块 购物车模块 订单模块 后台管理模块 技术: mysql session 缓存服务器redis 异步任务处理celery 分布式文件存储系统fastdfs 二、用户认证模型 # django认证系统使用的用户模型 AUTH_USER_MODEL = "users.User" 1.类视图...

qq_20567419的博客 3168

SpringBoot集成MinIO依赖冲突问题

场景一: 使用minio8.3.0版本的依赖,报下列异常: An attempt was made to call a method that does not exist. The attempt was made from the following location: io.minio.S3Base.<clinit>(S3Base.java:105) The following method did not exist: okhttp3.Requ...

qq_39974348的博客 1万+

详解Nacos集群搭建

在我们日常的开发当中,用的都是单点Nacos,这种模式,我们自己开发测试玩一玩还可以,但是到了企业的生产环境之下,你还这么玩的话,那肯定是要出大问题了。因为在企业当中,我们更加强调的是高可用,所以在企业的生产环境下,Nacos一定要做成个集群。

博客 1万+

天天生鲜项目总结

1、生鲜类产品 B2C PC端网站 2、功能模块:用户模块,商品模块,购物车模块,订单模块 3、用户模块:注册,激活,登录,退出,个人中心,地址 4、商品模块:首页,详情页面,列表页面,搜索(hasystack+whoosh) 5、购物车模块:增加,修改,删除,查询 6、订单模块:确认订单页,订单创建(下单),请求支付,查询支付结果,评论 7、django默认的用户认证模型类AbstractUse...

qq_37623764的博客 4684

C#调用Bartender打印标签,除了打印还能一键导出图片和PDF(附完整代码)

本文详细介绍了如何使用C#集成Bartender实现标签的多格式输出,包括打印、图片和PDF导出。通过完整的代码示例和实战技巧,帮助开发者解决分辨率适配、纸张尺寸控制等核心问题,提升工业自动化和物流管理中的标签处理效率。

weixin_31236101的博客 369

天天生鲜Django项目总结

1.生鲜类产品 B2C PC电脑端网页 2.功能模块:用户模块 商品模块(首页、 搜索、商品) 购物车模块 订单模块(下单、 支付) 3.用户模块:注册、登录、激活、退出、个人中心、地址 4.商品模块:首页、详情、列表、搜索(haystack+whoosh) 5.购物车: 增加、删除、修改、查询 6.订单模块:确认订单页面、提交订单(下单)、请求支付、查询支付结果、评论 7.django默...

qq_43792002的博客 1417

【Photoshop JSX脚本】强大的事件监听器脚本 - event_listener.jsx

新手第一次了解的事件监听一定是ScriptingListener.8bi插件,如果你对此插件有了基本运用,那么现在了解一款更方便的时间监听脚本event_listener.jsx。不再像ScriptingListener.8bi插件那样晦涩难懂。 1、准备event_listener.jsx文件到 F:\Program Files\Adobe Photoshop 2020\Presets\...

Greless的后花园 8205

免ROOT、不刷机、不依赖Xposed实现Android改机的思路

最近在一个项目中需要模拟多种Android设备的环境。无奈市面上的大部分改机工具,要么需要ROOT权限,要么依赖Xposed,甚至还得重启设备。为了实现更灵活、更干净的改机方式,我开始了漫长的技术探索,最终找到了免ROOT、不刷机、拒绝Xposed的实现路径。Android_IDIMEI手机序列号手机型号、品牌、CPU型号等硬件信息GPS位置、Wi-Fi参数、通话记录、短信等软硬件数据这些信息通常用于标识设备唯一性,而改机就是对这些标识数据进行模拟或篡改。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2663

生成激活用户token(使用加密) : django开发之天天生鲜项目知识总结【3】

下面来进行分析,给用户发送,激活邮件,需要如何构成一条激活链接: 发送激活邮件,包含激活链接:http://127.0.0.1:8000/user/active/1(1就是注册的用户id,可以通过id号进行用户身份的判断) 激活链接中需要包含用户的身份信息:并且要将身份信息加密(防止某些人看穿规律,肆意伪造链接访问) 下面进行加密。需要导入一个模块: 下面进行安装: pip install ...

pythonstrat的博客 1078

网络安全与黑客攻防常见设备:前置机、跳板机、堡垒机与肉鸡

前置机、跳板机、堡垒机和肉鸡,这些看似冷僻的技术名词,实则是网络安全与黑客攻防战中的关键角色。它们有的守护着企业的数字Pltform,保卫网络安全;有的则成为黑客的跳板,游走于灰色地带。

网络技术联盟站 959

从项目中学习Django 天天生鲜---------前台首页分析

前台首页分析效果图逻辑分析实现的功能后台传给首页的信息步骤创建前台app并注册建模普通的的登录和注册邮箱登录(难点)163邮箱开启pop3/SMTPQQ邮箱开启pop3/SMTP邮箱配置逻辑分析验证码Ajax流程邮箱点击登录首页渲染给后台添加数据 效果图 逻辑分析 从上图就很容易分析出我们需要实现的功能及其后台需要传给首页那些信息 如果读者想看效果图的纯静态文件 链接:https://pan.baidu.com/s/1LijTjHtKdc301IJw37Xk5Q 提取码:xkhf 实现的功能 登录

a1309525802的博客 3460

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

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

诊断CAPL自动化(3)——封装了接收诊断数据的通用CAPL脚本函数库

DiagGetRespPrimitiveSize (获取诊断响应的单个数据) diagGetPrimitiveData (获取诊断返回的所有数据) DiagGetRespParameter(数值类型) DiagGetRespParameter(字符串类型) DiagGetRespParameter(byte数组)

蚂蚁小兵 6218

从项目中学习Django 天天生鲜---------前台商品展示

前台商品展示前言谈谈Django和Flask框架的特点谈谈你对AJAX的理解谈谈你对前后端分类的理解项目步骤功能分析商品详情成果图逻辑分析代码展示查看更多(难点)成果图逻辑分析代码展示弊端优化效果图 前言 在讲解商品展示前必然需要科普一些理论知识 谈谈Django和Flask框架的特点 首先,两者都是非常优秀的框架。整体来讲,两者设计的哲学是区别最大的地方。 Django: Django属于重量级框架,主要特点是大而全,集成了很多组件,例如: Models、 Email、 Form 等等,属于全能型框架。但

a1309525802的博客 4044

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Django 天天生鲜项目开发和腾讯云nginx+uwsgi+django部署(redis和fdfs也在同一云机上)

开发过程: 开发环境和配置 OS:windows10 MYSQL56 账号root 密码 mysql 登录命令:mysql -u root -p enterpw:mysql python3.5 anaconda 编辑器使用:pycharm导入或者新建工程 file-setting-projiect-interpreter设置对应的ananconda生成的envs file-setting-...

Panzeguang的博客 753

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

从项目中学习Django 天天生鲜---------支付宝

Django支付宝效果图Django配置支付宝生成秘钥安装沙盒版支付宝代码实现总结 效果图 代码不难,配置稍微麻烦和复杂 Django配置支付宝 https://www.alipay.com/ 登录支付宝后 点击自己的项目 生成秘钥 更换应用公钥 安装沙盒版支付宝 因为支付宝的自己的集成模块有点复杂所以需要用到第三方集成模块 代码实现 buyer/views.py .... # 支付 def alipay(request): #自己的私钥 app_p

a1309525802的博客 3600

深度学习工具包 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")

Django内置函数发送激活邮件整个流程以及代码

Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、QQ,下面以163邮件为例。 1)注册163邮箱,登录后设置。 2)在新页面中点击“客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码。 3)填写授权码。 4)提示开启成功。 5)打开项目目录中的settings.py文件,点击下图配置...

Shaun_X 865

2- vue django restful framework 打造生鲜超市 -环境搭建

使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, 支持第三方登录。集成了sentry错误监控系统。 线上演示地址: http://vueshop.mtian...

weixin_33860147的博客 256

python代码大全和用法,python代码大全简单

novel-fpg是一个小说开源项目,前端基于Flutter,后端是Python + Go双端(各自基于Flask、Gin实现了一遍),包含了用户注册、登录、jwt鉴权、签到、任务、书架、阅读器、购买章节、搜索书籍、绑定第三方账号、设置等功能。该项目旨在快速搭建中小型App项目,如果只追求开发效率,对并发性能没有要求建议使用Python进行后端开发,否则采用Go(该项目在实现同样功能的情况下,Go的代码量是Python的两倍);后端API为了方便,只注册了一个接口路由,接口函数通过请求参数动态执行。

阿发狗伪原创 1178

天天生鲜Django项目源码

github地址:https://github.com/sweetdoctor/dailyfresh

Scorpion-S的博客 1万+

天天爱射击

题目链接:天天爱射击 考虑每个木板。一定是穿过的第 s[i]s[i]s[i] 个子弹为其贡献一次答案。 所以我们可以对所有木板整体二分子弹的时间线。但是有一个 logloglog 的做法,我们可以离线木板,用主席树区间查询第几个子弹的时间。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std;

青烟绕指柔的博客 28万+

天天生鲜项目学习之-项目创建

在这边我是基于Mac 项目创建 项目创建之前我们新建一个数据库, 下面是操作步骤 xxzxdeMacBook-Pro:bin xxzx$ /usr/local/mysql/bin/mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connect...

weixin_34090643的博客 504
上一篇: Django通过celery 异步发送邮件 : django开发之天天生鲜项目知识总结【5】
下一篇: 用django-redis来存储session及记住用户的登录名 : django开发之天天生鲜项目知识总结【7】
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值