2017-12-21 2 views
0

Ich habe eine Django App läuft auf Nginx und Gunicorn, Innerhalb der App habe ich eine clients.py Datei mit einer Methode, die Post-Daten von externen Servern empfängt und verarbeitet, die Django-URL zugeordnet auf das VerfahrenWeitergabe von Daten von Nginx nach Django Methode

url(r'^client/client_request/$', clients.externalclient) 

der externe Server veröffentlicht keine Daten ist, wenn es 200 OK-Antwort von meinem Server. kann ich Daten in nginx Protokoll geschrieben log aber können sie auf meine Methode in django app nicht fangen, hier ist meine Nginx Config

server{ 
     listen 80; 
     server_name 00.00.000.000; 
     error_log /var/log/nginx/error.log; 
     large_client_header_buffers 4 16k; 

    # Tell nginx to ignore favicon 
    location = /favicon.ico { access_log off; log_not_found off; } 

    location/{ 


      proxy_pass http://127.0.0.1:8000/; 
      proxy_set_header X-Forwarded-Host $server_name; 
      proxy_set_header X-Real-IP   $remote_addr; 

     } 


    location /assets/ { 
      autoindex on; 
      alias /var/www/html/dev2_assets/; 

    } 

    location client/client_post/{ 
     proxy_set_header X-Forwarded-Host $server_name; 
     proxy_set_header X-Forwarded-For $remote_addr; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     keepalive_requests 10; 
     keepalive_timeout 75s; 
     proxy_redirect http://00.00.000.00/ /client/client_post; 
} 

} 

und hier wird die django-Methode, die Post-Anforderung

from django.http import HttpResponse 

def externalclient(request): 
    if request.method == 'POST': 
     print "Request received" 
    else: 
     print "Method not allowed" 
erhält

Bitte jeder, der den Fehler sehen kann, wird geschätzt. Vielen Dank.

+0

So Einbuchtung ist OK? Machen Sie den nächsten Schritt - ersetzen Sie Ihre 'print's mit' return HttpResponse ("Request received") ' – Ingaz

+0

Ja die Indentation ist in Ordnung, Dies ist, was ist' [22/Dec/2017 02:08:47] "POST/Client/client_post/HTTP/1.0 "302 0' – Peter88tom

+0

Das ist für mich sinnlos. 302 ist Umleitung. Sie legen eine explizite in Ihrem nginx, um alles um 0.0.0.0 umzuleiten. Was versuchst du wirklich? Sie können das indirekte von/innerhalb von Django tun, wo es viel einfacher liest. –

Antwort

0

Zuerst: Einrückung prüfen. Ich schlage vor, sogar ersten Scheck ./manage.py runserver

Zweitens: Wenn Sie richtig http Antwort benötigen, als return HttpResponse statt print

+0

Die Einrückung ist in meinen Codes gut, und wenn './manage.py runserver' zum Ausführen der App verwendet wird, zeigt es" POST/client/client_post/HTTP/1.0 "302 0 an, aber es zeigt weder die Antwort noch die print text ich habe die methode – Peter88tom

+0

angezogen Nur um sicher zu sein: du testest deine sicht mit 'curl -X POST'? – Ingaz

+0

Ich habe nicht versucht, 'curl' zu verwenden, lass das sehen. – Peter88tom