在服务器上的django项目中收集Swagger UI的静态

问题描述 投票:0回答:2

我在 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


django django-rest-framework swagger swagger-ui drf-yasg
2个回答
0
投票

我认为可以通过以下方法之一修复:

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


0
投票

实际上在 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

© www.soinside.com 2019 - 2024. All rights reserved.