QwindF 发表于 2023-11-18 13:23

[Python] Fastapi 关于Html的思考

本帖最后由 QwindF 于 2023-11-18 13:26 编辑

1.起因:有个想法,虽然fastapi的主流是用来写api,就是主流的后端运用,传输的数据都是json或其他数据类型的格式。
在查询了一些资料之后,发现fastapi其实也可以返回Html页面,并且可以挂载静态文件目录。
在静态的html中是没有动态数据的,那是不是可以通过上述的方法将静态变为动态,实现一些可视化数据交互。

2.讨论思路:
可以试着先写个登录页面,让后点击登入,发送请求到后端进行校验,返回个token·····

3.补充Fastapi的介绍(来自其他人的blog):

FastAPI 是一个现代、快速(高性能)、基于标准 Python 类型提示的 Web 框架。它是一个用于构建 API(应用程序编程接口)的异步框架,具有许多优秀的特性,使得开发者能够更轻松地构建高性能的 Web 服务。

以下是 FastAPI 的一些主要特性和优点:

1. **基于标准的 Python 类型提示:** FastAPI 使用 Python 3.7+ 的类型提示,这样可以在编码时提供更好的 IDE 支持,帮助开发者更容易地发现和修复错误。

2. **自动生成文档:** FastAPI 自动生成交互式文档,这使得 API 更易于理解和使用。文档是基于 OpenAPI 和 JSON Schema 生成的,可以通过浏览器直接访问。

3. **快速和高性能:** FastAPI 构建在 Starlette 和 Pydantic 上,这两者都是异步(async)的库,从而使得 FastAPI 具有出色的性能。它还支持异步请求处理,能够处理大量并发请求。

4. **依赖注入系统:** FastAPI 提供了一个强大的依赖注入系统,使得开发者能够更容易地组织和测试代码。

5. **自动验证和序列化:** 使用 Pydantic 模型,FastAPI 可以自动验证请求数据和序列化响应数据,减少了手动处理输入输出的工作量。

6. **WebSocket 支持:** FastAPI 不仅支持传统的 HTTP 请求,还支持 WebSocket,这使得构建实时应用程序变得更加容易。

7. **安全性:** FastAPI 集成了一些安全性功能,包括自动处理请求验证和防范常见的安全漏洞,例如 SQL 注入、跨站点脚本(XSS)等。

一个简单的 FastAPI 示例:

```python
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, query_param: str = None):
    return {"item_id": item_id, "query_param": query_param}

```


这个示例定义了两个简单的 API 路由,一个用于根路径 ("/"),另一个用于接受带有路径参数和查询参数的请求 ("/items/{item_id}")。 FastAPI 会自动生成交互式文档,使得我们可以轻松地了解和测试这些 API 端点。在生产环境的时候记得禁用文档功能!!

unpy 发表于 2023-11-20 14:21

什么是动态什么是静态?html里面有js它就可以动,就动态了

所以答案当然是可以的,只不过直接用它来做静态文件服务器,效率/并发能力比专业的如nginx差一大截。但用于小用户量/原型,那是肯定没问题滴

forhaoge 发表于 2023-11-28 10:52

没太理解楼主的思路,FastAPI是一种现代Python Web框架,它是要配合web服务器使用的,就算是作为api应用也要起一个uvicorn来运行,uvicorn就是一个标准的web服务器,有web服务那还不是想挂静态页面就挂静态页面,想做动态页面就上动态页面,在做开发的时候用jinjia2做页面去调试,这其实就是动态web应用了

QwindF 发表于 2023-12-2 21:47

forhaoge 发表于 2023-11-28 10:52
没太理解楼主的思路,FastAPI是一种现代Python Web框架,它是要配合web服务器使用的,就算是作为api应用也 ...

主要是我发现fastapi好像不能挂其他文件?比如js.css等
html中内嵌css和js好像不太优雅
页: [1]
查看完整版本: [Python] Fastapi 关于Html的思考