升级 Wagtail 和支持包后,我遇到了一个奇怪的问题,即所有静态资产(CSS、JS、字体等)在登录 Wagtail 管理时返回 404 错误,即。 sessionid 有效并在浏览器中设置。但是,在未登录时可以访问(没有 sessionid cookie)。这对于面向公众的网站以及
/admin
都是如此
网站运行中:
生产和开发(目前在本地)都使用
STATICFILES_STORAGE = whitenoise.storage.CompressedManifestStaticFilesStorage
和STATIC_URL = "static/"
设置。迁移和collectstatic
也已经运行。
我已经测试了几种方法:
没有饼干:
curl -I http://127.0.0.1:8000/static/wagtailadmin/js/vendor.610e8c3f47d9.js
HTTP/1.1 200 OK
Date: Mon, 01 May 2023 06:11:55 GMT
Server: WSGIServer/0.2 CPython/3.11.2
Content-Type: text/javascript; charset="utf-8"
Cache-Control: max-age=315360000, public, immutable
Access-Control-Allow-Origin: *
Vary: Accept-Encoding, Cookie
Last-Modified: Mon, 01 May 2023 03:59:51 GMT
ETag: "644f3937-41103"
Content-Length: 266499
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
X-Frame-Options: DENY
饼干:
curl -I http://127.0.0.1:8000/static/wagtailadmin/js/vendor.610e8c3f47d9.js -H "Cookie: csrftoken=fPp7Oq2lR90jkilUiPDRHTOPTsu2lMZm;sessionid=his9jbjahqa3j86hjueeop0lno8pb4a9"
HTTP/1.1 404 Not Found
Date: Mon, 01 May 2023 06:15:53 GMT
Server: WSGIServer/0.2 CPython/3.11.2
Content-Type: text/html; charset=utf-8
Content-Length: 2761
Vary: Cookie
无效的sessionid: à la
sessionid=thisisnotvalid
返还资产罚款
这就是它变得有趣的地方。 如果我设置
STATIC_URL = "http://127.0.0.1:8000/static/"
并通过http://localhost:8000
登录,一切正常。如果我设置STATIC_URL = "http://localhost:8000/static/"
没有骰子!如果我交换它们也是一样的。显然STATIC_URL
和WAGTAILADMIN_BASE_URL
不能相同。
在生产中,我真的没有(或不想)从单独的域提供资产的选项。我希望它能像正式那样工作。
调试=真: 设置
STATIC_URL
与 static/
一起使用,但当它与访问域相同时不起作用,并且在设置为备用域时起作用。
DEBUG=假: 如上所述工作。
static/
和匹配域不起作用。一个替代品。
base.py:
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
dev.py:
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATIC_URL = "http://127.0.0.1:8000/static/"
production.py:
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATIC_URL = "https://www.domainredacted.com/static/" # Formally just "static/"
已经很晚了,也许我在升级时遗漏了一些东西,但我似乎找不到它。非常感谢任何帮助。
应用程序和中间件:
INSTALLED_APPS = [
......
"generic_chooser",
"django_extensions",
"storages", # For S3 Storage
"wagtail_2fa",
"django_otp",
"django_otp.plugins.otp_totp",
"captcha",
"wagtailcaptcha",
"wagtail.contrib.modeladmin",
"wagtail.contrib.forms",
"wagtail.contrib.redirects",
"wagtail.contrib.settings",
"wagtail.contrib.routable_page",
"wagtailmetadata",
"wagtail.embeds",
"wagtail.sites",
"wagtail.users",
"wagtail.snippets",
"wagtail.documents",
"wagtail.images",
"wagtail.search",
"wagtail.admin",
"wagtail",
"wagtail.contrib.search_promotions",
"wagtail.contrib.table_block",
"modelcluster",
"taggit",
"django.contrib.sitemaps",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"whitenoise.runserver_nostatic",
"django.contrib.staticfiles",
]
MIDDLEWARE = [
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"wagtail_2fa.middleware.VerifyUserMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"wagtail.contrib.redirects.middleware.RedirectMiddleware",
]
原来是个很小的东西。由于来自 Rvector 的信息,我将安全和白噪声中间件移到了顶部。不知道为什么以前不是问题。生活和学习!
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"wagtail_2fa.middleware.VerifyUserMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"wagtail.contrib.redirects.middleware.RedirectMiddleware",
]