You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django与FastAPI整合场景下Django Admin静态文件404问题的配置咨询

Django与FastAPI整合场景下Django Admin静态文件404问题的配置咨询

嗨,这个问题我之前整合Django和FastAPI的时候也碰到过~核心原因是你只挂载了Django的ASGI应用,但Django在DEBUG模式下的静态文件自动服务并没有被FastAPI的路由链接管,所以访问/dj/static/开头的Admin静态资源时,FastAPI不知道该去哪里找这些文件。

下面是具体的解决步骤,一步步来:

第一步:确认Django的静态文件基础配置没问题

先检查你的conf/settings.py,确保这几项都配置正确(默认Django项目大多已经有,但再确认下更稳妥):

  • INSTALLED_APPS里包含django.contrib.staticfiles(Admin的静态文件靠它来管理)
  • 保留DEBUG = True(你已经设置了,DEBUG模式下Django会自动查找各app下的静态文件,不用提前收集)
  • 保留STATIC_URL = 'static/'(你也已经设置了)
  • 可选:可以加上STATIC_ROOT = BASE_DIR / 'staticfiles'(虽然DEBUG模式下用不上,但生产环境会用到,提前加上没坏处)

第二步:修改FastAPI主文件,挂载带静态文件处理的Django ASGI应用

你需要把Django的ASGI应用用ASGIStaticFilesHandler包裹,这样它就能处理静态文件请求了,然后再挂载到/dj路径下。

修改后的完整主文件代码如下:

import os
import uvicorn
from fastapi import FastAPI

from django.conf import settings
from django.apps import apps
from django.core.asgi import get_asgi_application
# 新增:导入Django的静态文件ASGI处理器
from django.contrib.staticfiles.handlers import ASGIStaticFilesHandler

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "conf.settings")
apps.populate(settings.INSTALLED_APPS)

app = FastAPI()

# 修改这里:用ASGIStaticFilesHandler包装Django的ASGI应用
django_asgi_app = ASGIStaticFilesHandler(get_asgi_application())
app.mount("/dj", django_asgi_app)


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

if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8001)

第三步:测试验证

重启你的Uvicorn服务,然后访问http://localhost:8001/dj/admin,应该就能正常加载Admin的CSS、JS等静态资源了,不会再出现404错误。

额外的生产环境提示(提前避坑)

如果以后要切换到生产环境(DEBUG = False),记得:

  1. 先运行python manage.py collectstatic命令,把所有静态文件(包括Admin的)收集到STATIC_ROOT指定的目录下
  2. 生产环境不建议用Django/ASGI来处理静态文件,最好用Nginx、Caddy这类反向代理服务器直接托管静态文件目录,性能会好很多

这样应该就能完美解决你的问题啦😉

火山引擎 最新活动