10 2021 档案

摘要:我们要搭建日志系统,我们使用loguru,挺不错的一个开源的日志系统。可以使用 pip install loguru 我们在common创建log.py使用方式也很简单 import os import time from loguru import logger #日志的路径 log_path = 阅读全文
posted @ 2021-10-29 06:32 北漂的雷子 阅读(1804) 评论(0) 推荐(0) 编辑
摘要:我们需要安装对应的连接的依赖 pip install pymysql 然后在配置testDatabase.py from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base f 阅读全文
posted @ 2021-10-29 06:32 北漂的雷子 阅读(686) 评论(0) 推荐(0) 编辑
摘要:这之前的接口,我们返回的格式都是每个接口异常返回的数据格式都会不一样,我们处理起来没有那么方便,我们可以封装一个统一的json处理。 那么我们看下如何来实现呢 from fastapi import status from fastapi.responses import JSONResponse, 阅读全文
posted @ 2021-10-29 06:31 北漂的雷子 阅读(3138) 评论(0) 推荐(0) 编辑
摘要:我们之前登录认证的一些内容都直接写入到代码中,我们现在统一的给放到config文件中。 SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7" ALGORITHM = "HS256" ACCESS 阅读全文
posted @ 2021-10-28 05:02 北漂的雷子 阅读(608) 评论(0) 推荐(0) 编辑
摘要:在之前的分享的中,产生了token,用于做登录的认证,那么产生了token后,登陆携带了token,我们如何校验呢? 我们先来梳理下逻辑。 1.调用登录接口,产生token 2.调用依赖登录的接口,在请求头中携带token 3.依赖登录的接口,接受到请求,判断是否在headers中携带token 4 阅读全文
posted @ 2021-10-28 05:01 北漂的雷子 阅读(1277) 评论(0) 推荐(0) 编辑
摘要:在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,FastAPI 学习之路(三十四)数据库多表操作,我们分享了基于jwt认证token和基于数据库创建用户 阅读全文
posted @ 2021-10-28 05:00 北漂的雷子 阅读(2660) 评论(0) 推荐(0) 编辑
摘要:我们在实际的开发中呢,总会遇到这样的场景,我们想在启动或者终止的时候,做一些事情,那么应该如何实现呢,其实也是很简单。fastapi提供了这样的操作。 那么我们看下具体是怎么实现的呢 app = FastAPI() @app.on_event("startup") def startup_event 阅读全文
posted @ 2021-10-26 21:52 北漂的雷子 阅读(1462) 评论(0) 推荐(0) 编辑
摘要:之前我们分享了操作关系型数据库,具体文章, FastAPI 学习之路(三十二)创建数据库 FastAPI 学习之路(三十三)操作数据库 FastAPI 学习之路(三十四)数据库多表操作 这次我们分享的是非关系型数据库--Redis。 首先,我们安装对应的依赖 pip intsall aioredis 阅读全文
posted @ 2021-10-26 21:52 北漂的雷子 阅读(1319) 评论(0) 推荐(0) 编辑
摘要:在实际的开发过程中,我们数据库,可以根据连接的环境不一样,我们会拆分成不一样的数据库,根据我们所要用的环境来选择对应的数据库即可,那么我们应该如何去实现根据选择去选择不一样的数据库呢。 首先,我们找一个配置的文件,我们这里演示 我们使用config.py去配置环境。配置如下 EVENT="test" 阅读全文
posted @ 2021-10-25 07:16 北漂的雷子 阅读(1036) 评论(0) 推荐(0) 编辑
摘要:相对于之前的text的消息来说,我们之前发送的消息都是text的居多,那么对于text格式的消息来说,我们处理起来,尤其是后端要麻烦的多,那么我们可不可以传递json格式的,对于前后端来说都好处理的一种格式的消息,那么答案来说是可以的。我们需要做下处理。 我们在之前的websockets管理中的的消 阅读全文
posted @ 2021-10-24 20:58 北漂的雷子 阅读(1579) 评论(0) 推荐(0) 编辑
摘要:有了上一遍的基础,其实这个一对一很简单,我们在之前的websockets管理中已经实现了一对一发消息的内容,这次呢,我们只需要实现一对一如何处理消息即可。 @app.websocket("/ws/{user}/") async def websocket_many_point( websocket: 阅读全文
posted @ 2021-10-24 20:57 北漂的雷子 阅读(848) 评论(0) 推荐(0) 编辑
摘要:其实代码没有问题,但是我们忽略了一点,就是我们在正常的开发中,肯定是遇到这样的情况,我们频繁的有客户端链接,断开链接,我们需要统一的管理起来,那么我们应该如何去管理呢,其实这个时候,我们要去声明一个类去管理我们的这些链接。我们应该如何优化呢。 定义一个链接管理类,处理我们所有的链接。 class C 阅读全文
posted @ 2021-10-24 16:07 北漂的雷子 阅读(709) 评论(0) 推荐(0) 编辑
摘要:本次是WebSockets的第六次分享了,我们这次只是对于之前的功能做下优化,顺便利用下之前的操作数据的接口,使用下数据库的练习。 我们都知道,在聊天室里面会有一个上线的概念。上线了要通知大家。然后下线了要告诉大家谁离开了。发小小大家要都能可以收到。那么我们基于这个去完善下我们的功能。 首先,我们的 阅读全文
posted @ 2021-10-24 16:07 北漂的雷子 阅读(677) 评论(0) 推荐(0) 编辑
摘要:在我们测试中,肯定会对接口进行测试。之前也分享过FastAPI 学习之路(三十八)对开发接口进行测试,那么我们针对WebSockets接口怎么测试呢。 其实很简单。 from fastapi.testclient import TestClient def test_websocket(): cli 阅读全文
posted @ 2021-10-24 15:07 北漂的雷子 阅读(702) 评论(0) 推荐(0) 编辑
摘要:之前我们是通过前端自动生成的,这次我们通过注册登录,保存到本地去实现。我们可以应该如何实现呢,首先我们实现一个登录界面。放在templates文件下。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Titl 阅读全文
posted @ 2021-10-24 15:06 北漂的雷子 阅读(880) 评论(0) 推荐(0) 编辑
摘要:上一篇文章,我们分享了WebSockets一些入门的,我们这节课,在原来的基础上,对于讲解的进行一个演示。我们最后分享了依赖token等。首先我们对上次的代码进行调整。 我们之前分享FastAPI 学习之路(三十八)Static Files,我们分享了动态文件的使用,我们按照之前分享的。将之前代码的 阅读全文
posted @ 2021-10-24 15:05 北漂的雷子 阅读(809) 评论(0) 推荐(0) 编辑
摘要:在实际的开发中呢,我们可能有些接口呢,不能对比进行开放,比如说我们内部的一些监控的接口,那么我们肯定想着如何在接口文档中进行屏蔽,那么我们看下应该如何实现呢。 @app.get("/legacy/", include_in_schema=False) def get_legacy_data(resp 阅读全文
posted @ 2021-10-23 09:29 北漂的雷子 阅读(675) 评论(0) 推荐(0) 编辑
摘要:我们之前的分析都是基于http的请求,那么如果是WebSockets可以支持吗,答案是可以的,那么我们看下如何实现的。 from fastapi import FastAPI, WebSocket from fastapi.responses import HTMLResponse app = Fa 阅读全文
posted @ 2021-10-23 09:29 北漂的雷子 阅读(1070) 评论(0) 推荐(0) 编辑
摘要:我们想要在接口中返回xml格式的内容,我们应该如何实现呢。 from fastapi import FastAPI,Response @app.get("/legacy/") def get_legacy_data(): data = """<?xml version="1.0"?> <shampo 阅读全文
posted @ 2021-10-23 09:28 北漂的雷子 阅读(1526) 评论(1) 推荐(0) 编辑
摘要:我们之前的部署都是基于本地的部署,我们这次来看下,如何基于docker去部署我们的项目。 1.首先去编写一个docker镜像的制作文件Dockerfile FROM python:3.7 RUN pip install fastapi uvicorn aiofiles fastapi-async-s 阅读全文
posted @ 2021-10-23 09:28 北漂的雷子 阅读(1687) 评论(0) 推荐(0) 编辑
摘要:在前面的开发中,我们在写代码的过程中呢,很多时候都是利用 uvicorn main:app --reload 来部署启动我们的服务,但是在实际的开发中,我们有时候可能需要加断点去调试我们的程序,只有加了断点,我们才能快速的开发调试我们实际遇到的问题,那么我们应该怎么加断点呢,其实也是很简单的,可以一 阅读全文
posted @ 2021-10-22 07:14 北漂的雷子 阅读(2067) 评论(0) 推荐(0) 编辑
摘要:对于开发好的接口需要进行测试之后次才能发布。当我们在开发的时候,没有提测前,我们也要对我们自己的接口进行测试,那么FastAPI 自身也带了针对开发的接口的测试的。我们看下FastAPI官方给我们了什么样的支持呢。 接口还是基于FastAPI 学习之路(三十七)元数据和文档 URL实现。我们看下如何 阅读全文
posted @ 2021-10-22 07:13 北漂的雷子 阅读(1461) 评论(0) 推荐(0) 编辑
摘要:我们在实际的开发中,都会遇到,我们要执行的一些任务很耗时,但是呢,对于前端呢,没必要进行等待。比如发送邮件,读取文件。我们在fastapi如何实现呢。 其实很简单,fastapi已经给我们封装好一个现成的模块,我们直接调用使用即可,非常方便。我们举一个简单例子演示下 from fastapi imp 阅读全文
posted @ 2021-10-22 07:13 北漂的雷子 阅读(771) 评论(0) 推荐(0) 编辑
摘要:如果使用前后台不分离的开发方式,那么模板文件中使用的静态文件,比如css/js等文件的目录需要在后台进行配置,以便模板渲染是能正确读到这些静态文件。那么我们应该如何处理呢。 首先安装依赖 pip install aiofiles 我们看下如何使用 我们去定义一个页面,展示我们对应的一张图片。 我们看 阅读全文
posted @ 2021-10-22 07:12 北漂的雷子 阅读(2144) 评论(1) 推荐(0) 编辑
摘要:我们可以使用APIRouter来声明路径操作,我们先看下如何简单的去使用。 from fastapi import APIRouter router=APIRouter() app = FastAPI() # 新建用户 @router.post("/users/", tags=["users"], 阅读全文
posted @ 2021-10-22 07:11 北漂的雷子 阅读(3849) 评论(0) 推荐(0) 编辑
摘要:你可以在 FastAPI 应用中自定义几个元数据配置。 你可以设定: Title:在 OpenAPI 和自动 API 文档用户界面中作为 API 的标题/名称使用。 Description:在 OpenAPI 和自动 API 文档用户界面中用作 API 的描述。 Version:API 版本,例如  阅读全文
posted @ 2021-10-22 07:11 北漂的雷子 阅读(886) 评论(0) 推荐(0) 编辑
摘要:之前我们的都是创建在一个文件中,但是我们在实际中,肯定不能这么设计,那么我们去创建一个目录,叫models。大致如下。 主要目录是 __init__.py 是一个空文件,但是说明models是一个package crud.py 数据库操作相关 database.py 数据库配置相关 models.p 阅读全文
posted @ 2021-10-22 07:09 北漂的雷子 阅读(1424) 评论(0) 推荐(0) 编辑
摘要:之前我们分享的是基于单个的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计。 class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) emai 阅读全文
posted @ 2021-10-20 06:00 北漂的雷子 阅读(1611) 评论(0) 推荐(0) 编辑
摘要:通过创建pydantic模型进行验证提交数据 from pydantic import BaseModel class UserBase(BaseModel): email: str class UserCreate(UserBase): """ 请求模型验证: email: password: " 阅读全文
posted @ 2021-10-20 05:59 北漂的雷子 阅读(2177) 评论(0) 推荐(0) 编辑
摘要:在大型的web开发中,我们肯定会用到数据库操作,那么FastAPI也支持数据库的开发,你可以用 PostgreSQL MySQL SQLite Oracle 等 本文用SQLite为例。我们看下在fastapi是如何操作设计数据库的 #这个安装依赖也可以 pip install sqlalchemy 阅读全文
posted @ 2021-10-20 05:58 北漂的雷子 阅读(2348) 评论(0) 推荐(0) 编辑
摘要:什么是中间件呢,"中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作. 它接收你的应用程序的每一个请求. 然后它可以对这个请求做一些事情或者执行任何需要的代码. 然后它将请求传递给应用程序的其他部分 (通过某种路径操作). 然后它获取应用程序生产的响应 (通过某种路 阅读全文
posted @ 2021-10-19 06:55 北漂的雷子 阅读(1032) 评论(0) 推荐(0) 编辑
摘要:CORS 或者「跨域资源共享」 指浏览器中运行的前端拥有与后端通信的 JavaScript 代码,而后端处于与前端不同的「源」的情况。 源 源是协议(http,https)、域(myapp.com,localhost,localhost.tiangolo.com)以及端口(80、443、8080)的 阅读全文
posted @ 2021-10-19 06:55 北漂的雷子 阅读(1041) 评论(0) 推荐(0) 编辑
摘要:OAuth2 规定在使用(我们打算用的)「password 流程」时,客户端/用户必须将 username 和 password 字段作为表单数据发送。我们看下在我们应该去如何实现呢。 我们写一个登录接口,默认返回token和token_type from fastapi import FastAP 阅读全文
posted @ 2021-10-19 06:54 北漂的雷子 阅读(1734) 评论(0) 推荐(0) 编辑
摘要:既然我们已经有了所有的安全流程,就让我们来使用 JWT 令牌和安全哈希密码让应用程序真正地安全。 关于 JWT 它是一个将 JSON 对象编码为密集且没有空格的长字符串的标准。字符串看起来像这样: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMj 阅读全文
posted @ 2021-10-19 06:54 北漂的雷子 阅读(1291) 评论(0) 推荐(0) 编辑
摘要:有时,我们要为整个应用添加依赖项。通过与定义FastAPI 学习之路(二十五)路径操作装饰器依赖项 类似的方式,可以把依赖项添加至整个 FastAPI 应用。 那么我们看下,如何去实现,比如我们全局都需要校验token。我们去看下,我们应该如何实现代码。 from fastapi import Fa 阅读全文
posted @ 2021-10-19 06:53 北漂的雷子 阅读(934) 评论(0) 推荐(0) 编辑
摘要:你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证。那么我们看下,需要怎么才能实现呢。我们现在的接口有一部分需要用OAuth2认证后才可以访问,另一部分可以随便去访问的,那么我们看下, 阅读全文
posted @ 2021-10-19 06:53 北漂的雷子 阅读(874) 评论(0) 推荐(0) 编辑
摘要:有时,我们并不需要在路径操作函数中使用依赖项的返回值。 或者说,有些依赖项不返回值。 但仍要执行或解析该依赖项。 对于这种情况,不必在声明路径操作函数的参数时使用 Depends,而是可以在路径操作装饰器中添加一个由 dependencies 组成的 list。 我们看下,如何去实现。我们去校验下请 阅读全文
posted @ 2021-10-18 21:13 北漂的雷子 阅读(909) 评论(0) 推荐(0) 编辑
摘要:我们先看一个简单的demo。 from typing import Optional from fastapi import Depends, FastAPI app = FastAPI() fake_items_db = [{"city": "beijing"}, {"city": "shangh 阅读全文
posted @ 2021-10-18 21:11 北漂的雷子 阅读(861) 评论(0) 推荐(0) 编辑
摘要:FastAPI 支持创建含子依赖项的依赖项。并且,可以按需声明任意深度的子依赖项嵌套层级。 FastAPI 负责处理解析不同深度的子依赖项。 我们去实现一个简单的demo from fastapi import Depends, FastAPI from typing import Optional 阅读全文
posted @ 2021-10-18 21:11 北漂的雷子 阅读(298) 评论(0) 推荐(0) 编辑
摘要:FastAPI 提供了简单易用,但功能强大的依赖注入系统。这个依赖系统设计的简单易用,可以让开发人员轻松地把组件集成至 FastAPI。 什么是依赖注入? 声明代码(本文中为路径操作函数 )运行所需的,或要使用的「依赖」的一种方式。 然后,由系统(本文中为 FastAPI)负责执行任意需要的逻辑,为 阅读全文
posted @ 2021-10-18 21:10 北漂的雷子 阅读(968) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-18 21:09 北漂的雷子 阅读(1154) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-18 21:08 北漂的雷子 阅读(2005) 评论(0) 推荐(0) 编辑
摘要:第一部分:基础学习 FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七 阅读全文
posted @ 2021-10-17 15:00 北漂的雷子 阅读(19248) 评论(0) 推荐(1) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 14:57 北漂的雷子 阅读(1263) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 14:56 北漂的雷子 阅读(1046) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 14:55 北漂的雷子 阅读(2064) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 11:09 北漂的雷子 阅读(2222) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 11:04 北漂的雷子 阅读(1316) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 11:00 北漂的雷子 阅读(1599) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 10:20 北漂的雷子 阅读(1465) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 10:14 北漂的雷子 阅读(1565) 评论(1) 推荐(1) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 10:07 北漂的雷子 阅读(1558) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 10:02 北漂的雷子 阅读(1820) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 09:55 北漂的雷子 阅读(2346) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 FastAPI 学习之路(七)字符串 阅读全文
posted @ 2021-10-17 09:49 北漂的雷子 阅读(1892) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) FastAPI 学习之路(六)查询参数,字符串的校验 我们之前在声明必须的参数的时候呢,我 阅读全文
posted @ 2021-10-17 09:43 北漂的雷子 阅读(2093) 评论(0) 推荐(0) 编辑
摘要:系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之路(五) 本次分享的是分享的是查询参数,字符串的校验。 我们看一个demo。 from typing 阅读全文
posted @ 2021-10-17 09:37 北漂的雷子 阅读(3000) 评论(1) 推荐(1) 编辑

点击右上角即可分享
微信分享提示