Django缓存、验证码、登录、表单验证

vue+django 实现图片验证码功能 取出redis里的值 django逻辑之二 注册接口 class Register(APIView): def get(self,request): # 接收参数 username = request.GET.get('username','未收到') password = request.GET.get('password','未收到密码') password2 = request.GET.get('pas... 阅读详情

1.3 缓存、验证码、登录、表单验证

Django 中的缓存

  1. 接口及用法

    from django.core.cache import cache
    
    # 在缓存中设置 age = 123, 10秒过期
    cache.set('age', 123, 10)
    
    # 获取 age
    a = cache.get('age')
    print(a)
    
    # 自增
    x = cache.incr('age')
    print(x)
    
  2. 使用 Redis 做缓存后端

    • 安装 pip install django-redis

    • settings 配置

      CACHES = {
          "default": {
              "BACKEND": "django_redis.cache.RedisCache",
              "LOCATION": "redis://127.0.0.1:6379/0",
              "OPTIONS": {
                  "CLIENT_CLASS": "django_redis.client.DefaultClient",
                  "PICKLE_VERSION": -1,
              }
          }
      }
      
  3. 利用过期时间可以处理一些定时失效的临时数据, 比如手机验证码

  4. 面试题:

    1. 如何用Redis做缓存?

Cookie、 Session 机制剖析

  1. 回顾 HTTP 协议

    1. host
      1. linux: /etc/hosts
      2. windows: C:/Windows/System32/drivers/etc/hosts
  2. 产生过程

    1. 浏览器: 向服务器发送请求
    2. 服务器: 接受并创建 session 对象 (该对象包含一个 session_id)
    3. 服务器: 执行 views 函数, 并得到一个 response 对象
    4. 服务器: 执行 response.set_cookie(‘sessionid’, session_id) 将 session_id 写入 cookie
    5. 服务器: 将 response 传回浏览器
    6. 浏览器: 读取 response 报文, 从 Cookies 取出 session_id 并保存
  3. 后续请求

    1. 浏览器: 向服务器发送请求, session_id 随 Cookies 一同发给 Server
    2. 服务器: 从 Headers 的 Cookies 中取出 session_id
    3. 服务器: 根据 session_id 找出对应的数据, 确认客户端身份
  4. Django 中的代码实现

    class SessionMiddleware(MiddlewareMixin):
        def __init__(self, get_response=None):
            self.get_response = get_response
            engine = import_module(settings.SESSION_ENGINE)
            self.SessionStore = engine.SessionStore  # 设置 Session 存储类
    
        def process_request(self, request):
            # 从 Cookie 获取 sessionid
            session_key = request.COOKIES.get('session_id')
    
            # 通过 session_key 获取之前保存的数据
            request.session = self.SessionStore(session_key)
    
        def process_response(self, request, response):
            try:
                # View 函数结束后, 获取 session 状态
                accessed = request.session.accessed
                modified = request.session.modified
                empty = request.session.is_empty()
            except AttributeError:
                pass
            else:
                # 如果 Cookie 中有 sessionid, 但 session 为空,
                # 说明 view 中执行过 session.flush 等操作,
                # 直接删除 Cookie 中的 session
                if 'session_id' in request.COOKIES and empty:
                    response.delete_cookie(
                        settings.SESSION_COOKIE_NAME,
                        path=settings.SESSION_COOKIE_PATH,
                        domain=settings.SESSION_COOKIE_DOMAIN,
                    )
                else:
                    if accessed:
                        patch_vary_headers(response, ('Cookie',))
                    if (modified or settings.SESSION_SAVE_EVERY_REQUEST) and not empty:
                        # 设置过期时间
                        if request.session.get_expire_at_browser_close():
                            max_age = None
                            expires = None
                        else:
                            max_age = request.session.get_expiry_age()
                            expires_time = time.time() + max_age
                            expires = cookie_date(expires_time)
    
                        # 保存会话数据, 并刷新客户端 Cookie
                        if response.status_code != 500:
                            try:
                                request.session.save()
                            except UpdateError:
                                raise SuspiciousOperation(
                                    "The request's session was deleted before the "
                                    "request completed. The user may have logged "
                                    "out in a concurrent request, for example."
                                )
    
                            # 让客户端将 sessionid 添加到 Cookie 中
                            response.set_cookie(
                                'session_id',
                                request.session.session_key,
                                max_age=max_age,
                                expires=expires,
                                domain=settings.SESSION_COOKIE_DOMAIN,
                                path=settings.SESSION_COOKIE_PATH,
                                secure=settings.SESSION_COOKIE_SECURE or None,
                                httponly=settings.SESSION_COOKIE_HTTPONLY or None,
                            )
            return response
    
  5. 面试题:

    1. 如何区分 Cookie、Session?
    2. 请描述 HTTP 协议

验证短信

  1. urls.py 增加新的url路由映射
    1. url(r’api/user/submit/vcode’, user_api.submit_vcode)
  2. 实现路由映射:
    1. submit_vcode
      1. 获取手机号、验证码
      2. 取出缓存里的对应这个手机号的验证码
      3. 检查验证码一致,登录或自动注册
      4. 不一致返回错误

个人资料接口规划

  1. 获取个人资料接口
  2. 修改个人资料接口
  3. 上传个人头像接口

Profile 模型设计 (仅作参考)

FieldDescription
location目标城市
min_distance最小查找范围
max_distance最大查找范围
min_dating_age最小交友年龄
max_dating_age最大交友年龄
dating_sex匹配的性别
vibration开启震动
only_matche不让为匹配的人看我的相册
auto_play自动播放视频

开发中的难点

  1. Profile 与 User 两个模型是什么关系 ?
  2. 企业中不使用外键如何构建 “表关联” ?
  3. 接口中有太多字段批量提交时应如何验证 ?
  4. 如何上传头像 ?https://docs.djangoproject.com/zh-hans/2.0/topics/http/file-uploads/
  5. 大型项目中如何保存大量的静态文件 ?
  6. 上传文件、发送验证码、图像处理等较慢操作应如何处理才能让用户等待时间更短 ?

数据库表关系的构建

  1. 关系分类

    • 一对一关系
    • 一对多关系
    • 多对多关系
  2. 外键的优缺点

    • 优点:
      • 由数据库自身保证数据一致性和完整性, 数据更可靠
      • 可以增加 ER 图的可读性
      • 外键可节省开发量
    • 缺点:
      • 性能缺陷, 有额外开销
      • 主键表被锁定时, 会引发外键对应的表也被锁
      • 删除主键表的数据时, 需先删除外键表的数据
      • 修改外键表字段时, 需重建外键约束
      • 不能用于分布式环境
      • 不容易做到数据解耦
  3. 应用场景

    • 适用场景: 内部系统、传统企业级应用可以使用 (需要数据量可控, 数据库服务器数量可控)
    • 不适用场景: 互联网行业不建议使用
  4. 手动构建关联

    1. 一对一: 主表 id 与 子表 id 完全一一对应
    2. 一对多: 在 “多” 的表内添加 “唯一” 表 id 字段
    3. 多对多: 创建关系表, 关系表中一般只存放两个相关联的条目的 id
    4. 博客案例思考
      1. 用户和文字的关系:一对多
      2. 用户和收藏关系:多对多
      3. 用户-角色-权限关系
      4. 用户-角色:一对多
        2. 角色-权限:多对多
  5. 可通过 property 的方式对子表进行关联操作

    • property 用法

      class Box:
          def __init__(self):
              self.l = 123
              self.w = 10
              self.h = 80
      
          @property
          def V(self):
              return self.l * self.w * self.h
      
      b = Box()
      print(b.V)
      
    • 对子表关联操作

      class User(models.Model):
          ...
          user_id = models.IntergerField()
          ...
      
          @property
          def user_profile(self):
              if not hasattr(self, '_profile'):
                  self._profile = Profile.objects.get(user_id=self.user_id)
              return self._profile
      
      
      
      class User(models.Model):
      ...
          demo_id = models.IntegerField()
          ...
      
          @property
      def demo(self):
              if not hasattr(self, '_demo'):
              self._demo = Demo.objects.get(id=self.demo_id)
              return self._demo
      
      

    class Demo(models.Model):
    xxx = models.CharField()
    yyy = models.CharField()

     user = User.objects.get(id=123)
    

    print(user.demo.xxx)
    print(user.demo.yyy)
    ```

    • 也可以使用 cached_property 对属性值进行缓存

      from django.utils.functional import cached_property
      
      class User(models.Model):
          year = 1990
          month = 10
          day = 29
      
          @cached_property
          def age(self):
              today = datetime.date.today()
              birth_date = datetime.date(self.year, self.month, self.day)
              times = today - birth_date
              return times.days // 365
      
  • 面试题:
    • 复杂SQL查询:分组、连接
      • Student表有:id和name字段
      • Score表有:student_id, exam_id, object_id, score
      • 求:
        1. 某次考试成绩最好的学生
      • 进阶思考:每次考试成绩前三的学生?
        • 提示:窗口函数。

Django 中的 Form 表单验证

  • Django Form 核心功能:数据验证

  • 网页中 <form> 标签

    • <form> 标签的 method 只能是 POST 或 GET
    • method=POST 时,表单数据在请求的 body 部分
    • method=GET 时, 表单数据会出现在 URL 里
  • Form 对象的属性和方法

    • form.is_valid() : 表单验证
    • form.has_changed() : 检查是否有修改
    • form.clean_<field>() : 针对某字段进行特殊清洗和验证
    • form.cleaned_data['fieldname'] : 清洗后的数据存放于这个属性
  • Form 的定义和使用

    from django import forms
    
    class TestForm(forms.Form):
        TAGS = (
            ('py', 'python'),
            ('ln', 'linux'),
            ('dj', 'django'),
        )
        fid = forms.IntegerField()
        name = forms.CharField(max_length=10)
        tag = forms.ChoiceField(choices=TAGS)
        date = forms.DateField()
    
    POST = {'fid': 'bear',
            'name': 'hello-1234567890',
            'tag': 'django',
            'date': '2017/12/17'}
    form = TestForm(POST)
    print(form.is_valid())
    print(form.cleaned_data)  # cleaned_data 属性是 is_valid 函数执行时动态添加的
    print(form.errors)
    
  • ModelForm 可以通过相应的 Model 创建出 Form

    class UserForm(ModelForm):
        class Meta:
            model = User
            fields = ['name', 'birth']
    

云服务市场

  1. AWS:亚马逊:Amazon Web Service,全球领先
    1. 云服务器:EC2:elastic cloud computer
    2. 云存储:S3:simple storage service
    3. 云数据库:RDS:relationship database service:MySQL
    4. 消息队列:SQS:Simple Queue Service
    5. 全文检索:
    6. 云数据仓库:redshift
  2. Azure:微软:非常多的linux服务器,各种服务都有
  3. Google Cloud
  4. 阿里云:国内第一
    1. 云服务器:ECS
    2. 云存储:OSS
    3. 云数据库:RDS
  5. 腾讯云
    1. …
  6. 不值一提的云:
    1. 金山云
    2. 百度云
    3. 华为云
  7. 专用云:
    1. 存储:
      1. 七牛
        1. 图片缩放:
          1. 新建图片样式
          2. 选择自己想要的缩放方式
          3. 起名字
          4. 保存
          5. 使用方法:
            1. http://pvhv7tfry.bkt.clouddn.com/space_city.jpg?imageView2/1/w/200/h/200/q/75|imageslim
        2. 图片的渐进式显示:
          1.
      2. 又拍
    2. 直播:
    3. 短信:云之讯
    4. 邮件:sendcloud
  8. 上云之后服务的构建方法:
    1. 只用云服务器,其他都自己在云服务器里实现
      1. 不依赖云,换云或离开的成本极低
      2. 用的人多,开发周期长
    2. 充分利用各种云服务
      1. 节约人力成本,用的人少,开发周期短
      2. 依赖于云服务,换云或者离开云的成本高
      3. 在云上自己做高可用
  9. 不上云,
    1. 传统业务
    2. 纯流量型业务:视频分发
  10. 面试题:
  11. 你们用了什么云服务?
  12. 都用了哪些功能?
  13. 多少钱?
十四、Django框架使用 Django是劳伦斯出版集团的开发人员为开发新闻内容网站而设计出来的一个软件,它遵循MVC思想,但是有自己的一个名词,叫做MVT。Django遵循快速开发和DRY原则。Do not repeat yourself.不要自己去重复一些工作。它提供了许多有用的工具和功能,使开发者能够轻松地构建高度可拓展、安全、高性能的 Web 应用。强大的路由系统:Django 提供了易于配置和管理 URL 路由的功能,使开发者能够定义页面和应用程序的 URL 映射。 阅读详情

相关推荐

django的redis连接以及图片验证码的生成

一、在settings里面设置redis的库下载插件:pip install django-redis。

2301_77944253的博客 254

Django拓展 图片验证码与redis简单实现

Django框架 (十二)图片验证码与redis 前言 需要额外安装下面两个库 pip install pillow pip install django-redis 生成图形验证码源代码下载 redis配置 在项目的settings.py中配置redis数据库的连接 CACHES = { "default": { "BACKEND": "django_redis.cac...

Weary_PJ的博客 815

SWIFT报文实战指南:从MT700到MT799的信用证操作全解析

本文深入解析了国际贸易中信用证操作的核心SWIFT报文流程,从开证的MT700到各类通知、修改及结算报文(如MT707、MT730、MT754、MT732/734等)。通过实战案例与关键字段拆解,指导外贸与银行从业者精准处理报文,规避风险,并探讨了利用自动化工具提升处理效率的方法,助力保障跨境交易顺畅。

weixin_29015801的博客 879

Django搭建服务器,和微信小程序通信,验证码存入redis,用户信息存入mysql以及图片上传

一、创建项目 django-admin startproject wxTest 二、注册app,进入到wxTest目录中 python manage.py startapp api 三、提前安装djangorestframework包 四、在settings.py中添加rest_framework INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.con

執筆冩回憶 1247

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 671

【EMC电磁兼容】02.04——原理图的实战落地细节

原理图上的关于EMC的落地体现一、元器件的选型二、原理图上的EMC体现在哪里?1.芯片电源管脚滤波去耦:2.时钟电路滤波设计3.低速电路滤波抗干扰设计4.通讯接口电路的防护滤波5.系统输入电源端口电路的防护滤波6.系统接地的定义7.芯片软件功能的审查 一、元器件的选型 ​ 原理图最初设计涉及到选型元器件方面: 元器件选型 不仅仅功能需要满足要求,还需要考虑其它细节参数在不同应力下的反应,封装的不同也会产生不同的变化。 元器件替代 常常因为成本原因进行器件替代,除了要考虑功能参数相同时也要考虑系统参数

Time to Forget 2243

Django 表单验证

Django 表单类简介:用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础Form对象 Form表单的功能: 1、自动生成HTML表单元素 2、检查表单数据的合法性(后端验证) 3、如果验证错误,重新显示表单(数据不会重置) 4、数据类型转换(字符类型的数据转换成相应的Python类型) Django 表单一般实现步骤: 第一步:在models.py定义实体对象Book from django.db import models # Create your

zhouzhiwengang的专栏 1688

libcurl库使用详情、libcurl库的制作

​ libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 、库下载。这种库使用的时候就像使用wiringPi库一样,编写完代码需要链接这个库,所以要先下载这个库。libcurl的使用(其实和socket编程时一样,都需要一定的步骤):

qq_45698138的博客 5337

Django - 边学Django边写毕业设计(day06 注册与登录完成)

2021.9.27 1.注册功能完成 发现其实昨天已经完成了,我以为得多个超时验证,结果事实是如果cache.get(email)里的内容已超时,返回的是None。所以只需要把输入的值直接拿来和get到的值比较即可。 还有一开始比较的时候,一直返回的是不匹配,后来我打印了两个值比较,也都一样没毛病,但依旧返回不匹配。我再打印他俩的数据类型,发现缓存里存的是int类型,而POST过来的数据是str类型,就强转成int类型,就过了,跳转到/login/登录页面(还没写),也表明注册功能也完成了。 还

DreamingBetter的博客 259

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

Fleury算法寻找欧拉回路(mtlab代码详解)

【代码】Fleury算法寻找欧拉回路(mtlab代码详解)

m0_63449998的博客 1296

为 Django admin 登录页添加验证码

为什么80%的码农都做不了架构师?>>> ...

weixin_34179762的博客 1143

R 语言 ggplot2 绘制精美高级全球地图

在本教程中,我们将学习如何使用R语言和ggplot2包绘制精美高级地图。ggplot2是一个功能强大的数据可视化包,它可以让我们创建漂亮、交互式的地图。我们将使用R中的一些其他包来处理地理空间数据,以便与ggplot2无缝协作。

Mrrunsen的博客 1867

Django- Form&Auth&验证码&富文本&缓存

day07 Form&Auth&验证码&富文本&缓存 一. Form&Auth Form有非常多使用方法,丰富的内容,我这里只做一个表单验证 Form的验证思路 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息。 # Form的使用 class RegisterForm(forms.Form): # 使用表单做...

Orangeric 285

从 SM59 到 SPROXY,打通 ABAP 后端与 ES Repository 的代理生成链路

本文探讨了在SAP PI/PO项目中配置ABAP后端系统与ES Repository连接的关键步骤,重点解决ABAP Proxy生成时无法获取接口模型的问题。文章指出: 该配置本质是建立设计时通道,使ABAP系统能通过SPROXY访问ES Repository中的接口模型并生成代理类 配置核心是在SM59创建名为SAP_PROXY_ESR的HTTP连接(类型G),需确保: 目标路径为/rep 使用具备SAP_XI_IS_SERV_USER角色的服务账号 连接测试通过后仍需在SPROXY中验证完整功能 常见陷

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

form表单、验证码、缓存

Form&Auth&验证码&富文本&缓存 一. Form&Auth Form的验证思路 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息。 # Form的使用 class RegisterForm(forms.Form): # 使用表单做校验 # 表示username字段必须填写,且最大不超过16字符,最...

weixin_45183510的博客 1077

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Django集成图片验证码功能:基于django-simple-captcha实现

从基本的表单集成,到视图处理、模板渲染,再到高级的AJAX异步刷新和性能优化,构建了一个完整的企业级验证码解决方案。该库不仅提供了开箱即用的安全特性,还支持丰富的自定义配置,能够满足不同场景的需求。在实际项目中,建议结合具体的业务逻辑,合理配置验证码的有效期、复杂度和刷新机制,在用户体验和安全性之间找到最佳平衡点。库,从环境配置到实际应用,完整演示图片验证码在Django项目中的集成过程。### 在表单中集成验证码我们通过一个用户注册表单的实例来演示验证码的集成。:在自动化测试中,可以通过。

Jk64v8b8F的博客 285

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Django】Django框架使用指南

Django是一个基于Python语言的开源Web应用框架,采用MTV的软件设计模式,即模型(Model)、模板(Template)和视图(Views)。

ccql's Blog 2444

drf实现图片验证码功能

一.背景   在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若使用django-simple-captcha只需相应配置即可。但在前后端分离的情况下,就有点摸不着头脑了,序列化时CaptchaField不管作用,百度搜索也没找到相应的办法,于是心想只有重写...

weixin_33726943的博客 873

【Django REST framework电商项目笔记】第01章 项目简介

目录1. 开发环境2. 掌握的技术3. 课程系统构成4. Django REST framework 技能5. 开发中常见的问题6. 开发中常见问题的解决方案7. Django 进阶知识点8. vue 知识点9. 章节安排10. 技术储备要求11. 系统功能 1. 开发环境 开发工具: Pycharm 开发环境: Python3.6+Django2.0.2 数据库: MySQL5.7 前端: ...

E.W的博客 1571

day05form验证、验证码、cache、cors与celery(任务队列)、CBV

一. Form&Auth Form的验证思路 --使用django内部的用户表单验证 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息。 '''******************* # templates/register.html 注意: {% csrf_token %} {{ errors.username }} *************...

agelbaby的博客 382

Python基于flask-django考研学习系统的设计与实现

2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。多种统计效果:可以多种统计图效果展示,1、合并效果 2、单独展示3、随模块一起。

QQ1304979694的博客 146

python组件

定义闹钟时间runinghour = 1 # 定义运行时间times = runinghour * 3600 # 次数spk.Speak(u"快去看下饭好了没有?")time.sleep(60) # 每分钟对比一次时间"""获取当前时间的月份首日与最后一天:return: (首日,最后一天)"""首先,修改xadmin源码,修改xadmin/filters.py,在401行,做如下修改,...

m0_61634551的博客 5683

Django开发经常使用第三方库收集

这里有完整版的-[awesome-django] 以下是个人在开发过程中经常使用,在技术论坛被最多提及的关于Django的三方组件库: -[awesom...

一个有趣、有料、有内涵的地方! 543

1- vue django restful framework 打造生鲜超市

Vue+Django REST framework实战 使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, 支持第三方登录。集成了sentry错误监控系统 本小节内容: 介绍教程可以掌握的技术点和内容。 掌握的技术 ...

weixin_30752377的博客 212

研究生毕业论文评审管理系统Python django flask

用户登录后获得这张票,后续每次请求都出示它,系统验票通过就放行,无需反复查数据库,高效又安全。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。

2501_91488339的博客 284
上一篇: 机器学习
下一篇: Django配置
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值