IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> FastAPI第三天---文件请求 -> 正文阅读

[系统运维]FastAPI第三天---文件请求

FastAPI第三天

1. 表单数据

在每次我们实现登录的时候往往都是向服务器发送表单数据,但是从我们后端开发的角度来讲,表单数据确实最容易被攻击的部分。所以在设计表单的时候要设置好过滤器,处理用户发送给服务器的数据。当然,我们系统往往还涉及到数据库进行存储,这个时候SQL注入也是一件非常常见的攻击方式;还有其他类似于数据头注入、电子邮件注入等等手段,这些都是开发的时候需要考虑的。还是那句话,前端校验可以为我们避免部分攻击,但是后端的校验更为重要。

从FastAPI来说,在表单数据中需要使用Form,其中Form是继承自Body的,所以它的参数使用和之前的基本一致

image-20220221084808331

下面就实现以下最基本的登录API

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(
        username: str = Form(...,description="用户名,不超过十位",max_length=10),
        password: str = Form(...,description="密码,不小于6位",min_length=6)
):
    return {"username": username, "password": password}

image-20220221085243049

2. 文件请求

当我们上传文件的时候,需要使用FileFile继承自Form,所以操作也基本一致。当然我们也可以使用UploadFile,这个对象可以处理更加大的文件,而不像bytes只能储存在内存中。

这里先看一个例子

# 请求文件
from fastapi import FastAPI, File, UploadFile
from typing import List
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.post("/files/")
async def create_file(file: bytes = File(...)):
    return {"file_size": len(file)}


@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    return {
        "filename": file.filename,
        "content":await file.read(),
    }


@app.post("/mulfiles/")
async def create_file(files: List[bytes] = File(...)):
    return {"file_sizes": [len(file) for file in files]}


@app.post("/muluploadfiles/")
async def create_upload_file(files: List[UploadFile] = File(...)):
    return {"filenames": [file.filename for file in files]}


@app.get("/")
async def index():
    content = """
    <body>
    <form action="/mulfiles/" enctype="multipart/form-data" method="post">
    <input name="files" type="file" multiple>
    <input type="submit">
    </form>
    <form action="/muluploadfiles/" enctype="multipart/form-data" method="post">
    <input name="files" type="file" multiple>
    <input type="submit">
    </form>
    </body>
        """
    return HTMLResponse(content=content)

前两个Post是针对单个文件,后面的是多文件。很遗憾Swagger目前并不支持多文件上传,所以想要测试多文件上传可以使用postman或者直接访问自己写的表单页面进行测试。

注意,官网中的例子存在错误

image-20220221104301030

另外,针对UploadFile还具有一些异步方法

image-20220221104451160

  • write: 写入到文件
  • read:读取文件(多少个字节)
  • seek:找到文件中(字节)的位置
  • close:关闭文件

这些方法都是异步的,因此在代码中如果使用必须添加await

image-20220221104826031

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 21:02:27  更:2022-02-22 21:04:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:37:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码