社区首页 >问答首页 >在FastAPI中从根服务器提供静态文件

在FastAPI中从根服务器提供静态文件
EN

Stack Overflow用户
提问于 2020-12-22 22:10:21
回答 3查看 3.9K关注 0票数 6

我想让FastAPI和斯维特合作。我已经用Svelte构建了静态文件,现在我正在尝试从FastAPI中提供它们。问题是构建的Svelte文件从根引用例如global.css,这意味着我不能将它们安装在子文件夹上。

相反,我必须将它们挂载到根上:

代码语言:javascript
代码运行次数:0
复制
app.mount("/", StaticFiles(directory="web/public", html=True), name="web")

但是,这使得在路由(函数装饰器)中定义的任何内容都无法访问。

是否可能同时定义了静态文件和函数?无论是,

( a)路由优先,如果没有路由,则尝试从静态目录读取

( b)静态目录优先,我指定了一个排除路径,该路径改为路由。

EN

回答 3

Stack Overflow用户

发布于 2021-07-22 08:15:46

创建一个外部(根) FastAPI应用程序,并在其中挂载StaticFiles应用程序和现有的FastAPI应用程序。

代码语言:javascript
代码运行次数:0
复制
# Your main app must be first!
app = FastAPI(title="my app root")

api_app = FastAPI(title="my existing api")
api_app.include_router(my_existing_router)
app.mount('/api', api_app)

app.mount('/', StaticFiles(directory="static", html=True), name="static")

安装应用程序对象的顺序似乎很重要。对于OpenAPI文档,您将为根应用程序提供一个/docs,为您的API应用程序提供一个/api/docs

票数 11
EN

Stack Overflow用户

发布于 2022-10-01 00:05:37

我认为有一个比这里发布的更简单的解决方案:只需在之后挂载静态文件夹,即其他端点的定义。

代码语言:javascript
代码运行次数:0
复制
app = FastAPI()

@app.get("/api/hello")
async def hello():
    return "hello from fastapi"

app.mount("/", StaticFiles(directory="build", html=True), name="frontend")

现在,您可以访问根上用作静态站点的网站,同时也可以访问您可能希望用于后端功能的端点。

票数 1
EN

Stack Overflow用户

发布于 2022-07-13 05:52:51

您也可以在不创建“外部(根)应用程序”的情况下这样做;只要您在包含路由器之后挂载静态文件。

假设你有:

"project/main.py"

  • svelte中的
  • fastAPI应用程序在"project/client"
  • "a_router“中的应用程序在"project/subfolder/do_stuff.py"

文件中

main.py

代码语言:javascript
代码运行次数:0
复制
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from starlette.responses import RedirectResponse

from subfolder.do_stuff import a_router 

app = FastAPI()
app.include_router(a_router)

app.mount("", StaticFiles(directory="client/public", html=True), name="client")
app.mount("/build", StaticFiles(directory="client/public/build"), name="build")

@app.get('/')
async def client():  return RedirectResponse(url="client")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65419794

复制
相关文章
【说站】Flask中如何提供静态文件
1、可以使用send_from_directory从目录发送文件,这在某些情况下非常方便。
很酷的站长
2022/11/24
5660
【说站】Flask中如何提供静态文件
FastAPI搭建文件上传服务器
FastAPI 是一个高性能 Web 框架,也是一个Python包,用于构建 API,适合利用极少的代码搭建服务器后端,实现前后端分离。
里克贝斯
2021/05/21
2.7K0
FastAPI(62)- FastAPI 部署在 Docker
https://www.cnblogs.com/poloyy/p/15257059.html
小菠萝测试笔记
2021/10/12
3.7K0
为什么《流浪地球2》中根服务器如此重要?从根服务器与域名解析聊到内网穿透
春节档电影《流浪地球2》成为了全网热议的话题,作为一个程序员,对电影中描写的重启根服务器的情节非常感兴趣。电影中,在全球重启互联网时,工作人员冒着生命危险,上演了一出紧张刺激的与时间赛跑的精彩桥段,他们宁愿付出自己的生命,也要去启动位于中国北京、日本东京和美国杜勒斯的三台根服务器。
用户3147702
2023/02/15
3.3K0
FastAPI(42)- Static Files 静态资源
现在都是前后端分离,感觉在 FastAPI 应用程序中直接使用静态资源的可能性不大,只做了解(也不难
小菠萝测试笔记
2021/10/09
1.7K0
中国不是没有根服务器吗?《流浪地球2》的根服务器怎么在北京?
这片儿看得可太爽了,尤其是对咱们理工男的胃口,有涉及天体物理学、军事科技、机械装备等众多理工科领域。就连我们程序员也能在里面找到根服务器、人工智能这些熟悉的东西。
轩辕之风
2023/03/02
2.2K0
中国不是没有根服务器吗?《流浪地球2》的根服务器怎么在北京?
FastAPI从入门到实战(0)——初识FastAPI
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
MinChess
2022/12/27
3.7K0
FastAPI从入门到实战(11)——表单请求与上传文件
UploadFile 支持以下 async 方法,(使用内部 SpooledTemporaryFile)可调用相应的文件方法。
MinChess
2022/12/27
1.6K0
FastAPI从入门到实战(11)——表单请求与上传文件
(入门篇)简析Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架
用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API
用户7466307
2020/06/17
2.1K0
分离django中的媒体文件,静态文件
django项目中,占很大体积的是静态文件,媒体文件还有html代码,那我们该如何把它们分离出来以方便我们和服务器去管理和使用它们。
py3study
2020/01/05
1.7K0
FastAPI-文件上传(二)
当你接收到一个文件之后,你需要将它保存到你的服务器上。在FastAPI中,你可以使用Python的标准库os和shutil来处理文件上传和存储。
堕落飞鸟
2023/05/07
5430
各种根文件系统
(1) jffs2   JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。   Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压
233333
2018/03/07
2.7K0
FastAPI-文件上传(三)
在FastAPI中,你可以通过设置参数的限制条件来限制文件的大小和类型。例如,你可以使用max_length参数来限制bytes类型的文件的大小,使用content_type参数来限制UploadFile类型的文件的类型。例如:
堕落飞鸟
2023/05/07
1.3K0
FastAPI-文件上传(一)
在FastAPI中,文件上传是通过表单(form)提交的。你可以使用Form来声明一个表单字段,如下所示:
堕落飞鸟
2023/05/07
1.3K0
一个静态文件服务器
很久以前做了一个Visual Studio Code插件,用来快速开启http静态文件服务器,当然,现在已经被live server插件取代了,所以准备从GitHub中删除它,删除前留下一些遗照:
Jean
2021/09/28
1.2K0
Nginx配置静态文件服务从入门到精通
通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施。
happlyfox
2021/03/15
4.7K0
Nginx配置静态文件服务从入门到精通
Typecho 在Apache中开启伪静态
然后修改/etc/apache2/sites-available/中默认的配置文件,搜索其中的AllowOverride None,全部改为AllowOverride All,然后重启Apache,service apache2 restart。
用户2657851
2020/03/04
1.5K0
霸气!Nginx 中缓存静态文件秘籍
1、准备事项 我想你需要一个正常工作的 nginx 软件,可以查看另一篇的帖子:在 Ubuntu 16.04 LTS 上安装 Nginx,PHP 7 和 MySQL 5.7 (LEMP)。 2 配置 nginx 可以参考 expires 指令手册来设置 HTTP 头部过期时间,这个标记可以放在 "http {}"、"server {}"、"location {}" 等语句块或者 "location {}" 语句块中的条件语句中。一般会在 "location" 语句块中用 "expires" 指令控制你的静态文件,就像下面一样: location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; } 在上面的例子中,所有后缀名是 .jpg、 .jpeg、 .png、 .gif、 .ico、 .css 和 .js 的文件会在浏览器访问该文件之后的 365 天后过期。因此你要确保 location {} 语句块仅仅包含能被浏览器缓存的静态文件。 然后重启 nginx 进程: /etc/init.d/nginx reload 你可以在 "expires" 指令中使用以下的时间设置: ●"off" 让 "Expires" 和 "Cache-Control" 头部不能被更改。 ●"epoch" 将"Expires" 头部设置成 1970 年 1 月 1 日 00:00:01。 ●"max" 设置 "Expires" 头部为 2037 年 12 月 31 日 23:59:59,设置" Cache-Control "的最大存活时间为 10 年 ●没有" @ "前缀的时间意味着这是一个与浏览器访问时间有关的过期时间。可以指定一个负值的时间,就会把" Cache-Control "头部设置成" no-cache"。例如:"expires 10d" 或者" expires 14w3d"。 ●有" @ "前缀的时间指定在一天中的某个时间过期,格式是 Hh 或者Hh:Mm,H 的范围是 0 到 24,M 的范围是 0 到 59,例如:"expires @15:34"。 你可以用以下的时间单位: ●"ms": 毫秒 ●"s": 秒 ●"m": 分钟 ●"h": 小时 ●"d": 天 ●"w": 星期 ●"M": 月 (30 天) ●"y": 年 (365 天) 例如:"1h30m" 表示一小时三十分钟,"1y6M" 表示一年六个月。 注意,要是你用一个在将来很久才会过期的头部,当组件修改时你就要改变组件的文件名。因此给文件指定版本是一个不错的方法。例如,如果你有个 javascript.js 文件 并且你要修改它,你可以在修改的文件名字后面添加一个版本号。这样浏览器就要下载这个文件,如果你没有更改文件名,浏览器将从缓存里面加载(旧的)文件。 除了把基于浏览器访问时间设置" Expires" 头部(比如 "expires 10d")之外,也可以通过在时间前面的" modified "关键字,将 "Expires" 头部的基准设为文件修改的时间(请注意这仅仅对存储在硬盘的实际文件有效)。 expires modified 10d; 3 测试 要测试你的配置是否有效,可以用火狐浏览器的开发者工具中的网络分析功能,然后用火狐访问一个静态文件(比如一张图片)。在输出的头部信息里,应该能看到 Expires 头部和有 max-age 标记的 Cache-Control 头部(max-age 标记包含了一个以秒为单位的值,比如 31536000 就是指今后的一年) 霸气!Nginx 中缓存静态文件秘籍霸气!Nginx 中缓存静态文件秘籍 4 链接 nginx 的 Http 头部模块(HttpHeadersModule):" http://wiki.nginx.org/HttpHeadersModule"
竹清
2018/08/31
7930
超过700亿个文件在危险的网络服务器上免费提供
据CybelAngel称,企业防火墙外的关键漏洞是网络安全威胁的最大来源。在所有行业中,这些由未受保护或被破坏的资产、数据和凭证组成的漏洞,已成为对企业检测和保护的一个巨大挑战。 关键的网络安全漏洞 该报告还强调了黑客到达目标的关键路径,以及网络犯罪的趋势、数据风险的关键领域和按行业分列的风险暴露。 在暴露的问题中,CybelAngel发现: 所有检测到的威胁中,87%来自第三方或恶意行为者。 在所有检测到的面向互联网的资产中,9%存在相关的未修补漏洞。排名前十的CVE被发现未打补丁的次数至少各为120
FB客服
2023/05/12
1.4K0
超过700亿个文件在危险的网络服务器上免费提供
静态文件
一、创建目录 flask框架中静态资源的默认目录为static项目目录结构如下 project/ manage.py # 启动控制文件 static/ # 静态资源 templates/ # 模板文件 二、构造URL函数 函数:url_for() 格式:url_for(‘static’, filename=‘路径/文件名’) 作用:生成网址 三、使用 网页图标 <link rel="icon" type="image/x-icon" href="{{ url_for('static',
星哥玩云
2022/09/14
4700

相似问题

在HTTPS中,nginx的FastAPI不提供静态文件。

31

如何在FastAPI中提供静态文件

439

通过符号链接提供静态文件的FastAPI

16

Golang Appengine -如何从根url提供静态文件

13

最小FastAPI静态文件服务器脚本

214
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文