我在 Django 项目上为特定端点设置了 Swagger 配置
它在我的本地计算机上完全工作完成,但是当我将其发送到服务器上时,似乎无法收集 drf_yasg 的静态文件并显示有一个空白页面,没有任何 404 Not Found 错误,而且在控制台上它还编写了 Js CSS 文件找不到 404
招摇.py
from drf_yasg import openapi
from drf_yasg.views import get_schema_view
from django.urls import path
from requests_app.views import RequestsVS
from rest_framework import permissions
single_endpoint_schema_view = get_schema_view(
openapi.Info(
title="/api/",
default_version='v1',
description="برای احراز هویت نیاز است تا کلید دریافتی در هدر درخواست ها با عنوان زیر ارسال شود",
),
public=True,
permission_classes=[permissions.AllowAny],
patterns=[path('requests/add/outside/', RequestsVS.as_view({'post': 'create_from_outside'}))],
)
swagger_urlpatterns = [
path('swagger/', single_endpoint_schema_view.with_ui('swagger', cache_timeout=0),
name='schema-swagger-ui'),
path('redoc/', single_endpoint_schema_view.with_ui('redoc', cache_timeout=0),
name='schema-redoc'),
]
urlpatterns = swagger_urlpatterns + [
]
设置.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
AUTH_USER_MODEL = 'users.User'
# Swagger settings
SWAGGER_SETTINGS = {
'USE_SESSION_AUTH': False, # Set this to True if you're using session authentication
'SECURITY_DEFINITIONS': {
'Bearer': {
'type': 'apiKey',
'name': 'Authorization',
'in': 'header',
},
},
}
url.py
urlpatterns = [
path('admin/', admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += swagger_urlpatterns
我认为可以通过以下方法之一修复:
1 - 确保您的服务器上安装了
drf_yasg
,如果没有,您可以使用此命令来安装它
pip 安装 drf-yasg
2 - 验证静态文件是否在服务器上正确提供。确保正确设置 Web 服务器配置以提供静态文件。如果您使用 Django 的开发服务器 (manage.py runserver),当
DEBUG
设置设置为 True
时,它会自动提供静态文件。但是,在生产环境中,您可能需要配置 Web 服务器(例如,Nginx
我个人确实使用它)来提供静态文件。
您可以通过将此块添加到您的
Nginx
配置文件中来实现此目的:
location /static/ {
autoindex on;
autoindex_exact_size off;
alias /your_path/static/;
}
3 - 清除服务器上的静态文件缓存。有时,缓存的文件可能会导致问题。您可以尝试在服务器上运行以下命令来清除缓存:
python管理.pycollectstatic--clear
实际上在 DEV/STAGING 服务器上它将在环境静态上工作:
尝试运行: python manage.py findstatic --verbosity 2 static
然后
cp -r /env/lib/python3.11/site-packages/drf_yasg/static/drf-yasg/ /static/
或使用 django_static_whitenoise https://www.w3schools.com/django/django_static_whitenoise.php