web-dev-qa-db-de.com

Festlegen des Inhaltstyps im Django HttpResponse-Objekt für Shopify App

Ich arbeite an einer Shopify-App mit Django, die ich auf einem VPS mit Nginx und Gunicorn hoste.

Ich versuche, den Content-Type eines HttpResponse-Objekts in application/liquid zu ändern, damit ich die Anwendungs-Proxy-Funktion von Shopify verwenden kann , aber es scheint nicht zu funktionieren.

Hier ist meiner Meinung nach der relevante Abschnitt meines Codes:

from Django.shortcuts import render_to_response, render
from Django.http import HttpResponse
from Django.template import RequestContext
import shopify
from shopify_app.decorators import shop_login_required

def featured(request):
   response = HttpResponse()
   response['content_type'] = 'application/liquid; charset=utf-8'
   response['content'] = '<html>test123</html>'
   response['Content-Length'] = len(response.content)
   return response

Entsprechend den Django-Dokumenten sollte ich response[''content_type] setzen, um Content-Type in der Kopfzeile festzulegen. Wenn ich zu der URL, die dieser Funktion in views.py entspricht, gehe, bekomme ich leider eine Antwort von 200, aber der Content-Type hat sich nicht geändert und Content-Length ist 0. Hier sind meine Antwort-Header:

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 09 Jul 2013 12:26:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
X-Request-Id: 2170c81fb16d18fc9dc056780c6d92fd
content: <html>test123</html>
vary: Cookie
content_type: application/liquid; charset=utf-8
P3P: CP="NOI DSP COR NID ADMa OPTa OUR NOR"

Wenn ich response['content_type'] in response['Content-Type'] ändere, erhalte ich folgende Kopfzeilen:

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 09 Jul 2013 12:34:09 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 3097
Connection: keep-alive
X-Request-Id: 76e67e04b753294a3c37c5c160b42bcb
vary: Accept-Encoding
status: 200 OK
x-shopid: 2217942
x-request-id: 6e63ef3a27091c73a9e3fdaa03cc28cb
x-ua-compatible: IE=Edge,chrome=1
p3p: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
content-encoding: gzip
P3P: CP="NOI DSP COR NID ADMa OPTa OUR NOR"

Irgendwelche Ideen, wie ich den Inhaltstyp der Antwort ändern kann? Könnte dies ein Problem mit meinen Nginx- oder Gunicorn-Konfigurationen sein?

Danke für Ihre Hilfe!

19
winter

Versuche Folgendes:

def featured(request):
    content = '<html>test123</html>'

    response = HttpResponse(content, content_type='application/liquid')
    response['Content-Length'] = len(content)

    return response

Ein kurzer Tipp, Sie könnten dies in den http- oder server-Blockteil Ihrer NGINX-Konfiguration einfügen, damit Sie die Kodierung nicht in Ansichten und anderem Django-Code angeben müssen:

charset utf-8;
charset_types text/css application/json text/plain application/liquid;
16
Matt

Befolgen Sie die Anweisungen von aus den Dokumenten es sollte ungefähr so ​​aussehen:

# set content_type
response = HttpResponse("",
                        content_type="application/liquid; charset=utf-8")
# add content
response.write('<html>test123</html>')

Hoffe das hilft!

4
Paulo Bu

Das hat also für mich funktioniert:

def featured(request):
  response = HttpResponse("", content_type="application/liquid; charset=utf-8")
  response['Content-Length'] = len(content)
  response.write('<html>test123</html>')
  return response

Vielen Dank für die Hilfe!

4
winter

Um die anderen Antworten zu erweitern, wenn das HttpResponse-Objekt bereits vorhanden ist und der MIME-Typ nach der Instantiierung festgelegt werden muss (z. B. beim Aufrufen einer übergeordneten Methode), kann dies folgendermaßen erreicht werden:

response = super(...)  # This returns some HttpResponse object
response['Content-Type'] = "application/liquid"
return response
0
LostMyGlasses