python - post django
ConfiguraciĆ³n del tipo de contenido en el objeto Django HttpResponse para la aplicaciĆ³n Shopify (4)
Así que esto funcionó para mí:
def featured(request):
response = HttpResponse("", content_type="application/liquid; charset=utf-8")
response[''Content-Length''] = len(content)
response.write(''<html>test123</html>'')
return response
¡Gracias a todos por la ayuda!
Estoy trabajando en una aplicación de Shopify usando Django, que estoy alojando en un VPS con nginx y gunicorn.
Estoy tratando de cambiar el tipo de contenido de un objeto HttpResponse a application/liquid
, de modo que pueda usar la función de proxy de la aplicación de Shopify, pero no parece estar funcionando.
Aquí está lo que creo que es la sección relevante de mi código:
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
De acuerdo con los documentos de Django , debo establecer la response[''''content_type]
para establecer Content-Type
en el encabezado. Desafortunadamente, cuando voy a la URL correspondiente a esta función en views.py, recibo una respuesta 200, pero el tipo de contenido no ha cambiado y la longitud del contenido es 0. Aquí están mis encabezados de respuesta:
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"
Si cambio la response[''content_type'']
a la response[''Content-Type'']
, obtengo los siguientes encabezados:
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"
¿Alguna idea sobre cómo puedo cambiar el tipo de contenido de la respuesta? ¿Podría ser esto un problema con mis configuraciones nginx o gunicorn?
¡Gracias por tu ayuda!
Intenta lo siguiente:
def featured(request):
content = ''<html>test123</html>''
response = HttpResponse(content, content_type=''application/liquid'')
response[''Content-Length''] = len(content)
return response
Una sugerencia rápida, puede agregar esto a la parte http
o al bloque del server
de su configuración NGINX para que no tenga que especificar la codificación dentro de las vistas y otro código Django:
charset utf-8;
charset_types text/css application/json text/plain application/liquid;
Siguiendo las instrucciones de los documentos debería ser algo como esto:
# set content_type
response = HttpResponse("",
content_type="application/liquid; charset=utf-8")
# add content
response.write(''<html>test123</html>'')
¡Espero que esto ayude!
Solo para expandir las otras respuestas, si el objeto HttpResponse
ya existe y su tipo MIME debe establecerse después de crear una instancia (por ejemplo, cuando se invoca un método principal), se puede lograr de esta manera:
response = super(...) # This returns some HttpResponse object
response[''Content-Type''] = "application/liquid"
return response