Подтвердить что ты не робот

Настройка Content-Type в объекте Django HttpResponse для приложения Shopify

Я работаю над приложением Shopify, используя Django, который я размещаю на VPS с nginx и gunicorn.

Я пытаюсь изменить Content-Type объекта HttpResponse на application/liquid, так что я могу использовать функцию Shopify прокси-сервера приложения, но это не как представляется, работают.

Вот что я считаю соответствующим разделом моего кода:

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

Согласно Django docs, я должен установить response[''content_type], чтобы установить Content-Type в заголовок. К сожалению, когда я перехожу к URL-адресу, соответствующему этой функции в views.py, я получаю ответ 200, но Content-Type не изменился и Content-Length равен 0. Вот мои заголовки ответов:

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"

Если я изменяю response['content_type'] на response['Content-Type'], я получаю следующие заголовки:

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"

Любые идеи о том, как я могу изменить Content-Type ответа? Возможно, это проблема с моими конфигурациями nginx или gunicorn?

Спасибо за вашу помощь!

4b9b3361

Ответ 1

Попробуйте следующее:

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

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

    return response

Быстрый совет, вы можете добавить это в блок http или server блока конфигурации NGINX, поэтому вам не нужно указывать кодировку внутри представлений и другого кода Django:

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

Ответ 2

Следуя инструкциям из документов, это должно быть примерно так:

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

Надеюсь, это поможет!

Ответ 3

Итак, это сработало для меня:

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

Спасибо, всем, за помощь!

Ответ 4

Просто чтобы развернуть другие ответы, если объект HttpResponse уже существует и его тип MIME необходимо установить после его создания (например, при вызове родительского метода), это может быть достигнуто следующим образом:

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