Sto lavorando su un'applicazione Shopify utilizzando Django, che Sto ospitando su un VPS con nginx e gunicorn.Impostazione Content-Type in oggetto Django HttpResponse per Shopify App
Sto tentando di modificare il Content-Type di un oggetto HttpResponse su application/liquid
, in modo da poter utilizzare lo application proxy feature di Shopify, ma non sembra funzionare.
Ecco quello che ritengo essere la sezione dedicata del mio codice:
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
Secondo il Django docs, devo impostare response[''content_type]
al fine di impostare Content-Type
nell'intestazione. Purtroppo, quando vado a l'URL corrispondente a questa funzione in views.py, ottengo una risposta 200, ma il Content-Type non è cambiata e Content-Length è 0. Ecco le mie intestazioni di risposta:
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"
Se cambio response['content_type']
-response['Content-Type']
, ottengo le seguenti intestazioni:
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"
Tutte le idee su come posso cambiare il Content-Type della risposta? Potrebbe essere un problema con le configurazioni di nginx o gunicorn?
Grazie per il vostro aiuto!
Matt, grazie per il suggerimento sulla configurazione di nginx! Lo userò sicuramente. Sfortunatamente, ho provato il tuo suggerimento sul codice e viene restituito un errore Http 411 (lunghezza richiesta). Il tentativo di specificare il valore di 'length' o' Content-Length' come argomento nella risposta HttpResponse negli errori di Django (l'argomento della parola chiave non prevista e la parola chiave non possono essere un'espressione). – winter
ok, ho aggiornato la mia risposta. – Matt
'len (contenuto)' dovrebbe essere 'len (content.encode ('utf-8)' –