J'utilise Django avec Nginx sur le port 8000 . Ici Nginx est exposé à l'extérieur dans le port 8000. Mais dans Swagger UI, base_url est défini comme sans port. Swagger essaie donc d'accéder aux points de terminaison sans port, puis il donne une réponse comme TypeError: Failed to fetch .
Veuillez vous référer à l'image ci-dessous pour savoir comment base_url est définie
Veuillez vous référer à l'image ci-dessous pour savoir comment une demande est envoyée par Swagger
Lorsque j'accède au point de terminaison (avec port) en utilisant Postman, cela fonctionne bien. Le problème se produit uniquement lorsque j'essaie d'utiliser Swagger (car une demande est envoyée sans port).
Ici, je veux que Swagger envoie toutes les demandes avec le port. Veuillez m'aider à résoudre ce problème. Merci.
Remarque:
3 Réponses :
Ce n'est pas une bonne solution, mais définir l' url
complète dans get_schema_view()
dans urls.py fonctionne!
schema_view = get_schema_view( openapi.Info( ... ), url='http://example.net:8080/', # Important bit public=True, permission_classes=(permissions.AllowAny,) )
Merci pour votre réponse, @mtshaikh. Cela fonctionne bien, mais y a-t-il un moyen de le faire de manière automatique?
AFAIK, il y a un problème / discussion ouvert sur cette fonctionnalité actuellement en cours sur le github drf_yasg
.
Vous devez également indiquer au Nginx de transférer le port du serveur. As swager obtient le port url de base de l'en-tête de la requête (s'il n'est pas codé en dur comme le propose mtshaikh).
par exemple. quelque chose comme ça devrait être dans la configuration Nginx
location / { proxy_set_header Host $host:$server_port; proxy_pass http://example.com:8000/; }
Merci pour votre réponse et votre indice. J'ai trouvé la bonne solution et ajouté un commentaire.
Merci, @Petr Synek pour vos réponses et vos indices.
Nous devons dire au Nginx de transmettre le http_host .
location / { proxy_set_header Host $http_host; }
Celui-ci a résolu le problème mentionné ci-dessus