Use correct content-type header, refs #272

This commit is contained in:
Simon Willison 2019-06-23 12:52:10 -07:00
commit 1e8419bde4
6 changed files with 12 additions and 5 deletions

View file

@ -88,5 +88,5 @@ def json_renderer(args, data, view_name):
content_type = "text/plain"
else:
body = json.dumps(data, cls=CustomJSONEncoder)
content_type = "application/json"
content_type = "application/json; charset=utf-8"
return {"body": body, "status_code": status_code, "content_type": content_type}

View file

@ -90,13 +90,16 @@ class AsgiView(HTTPMethodView):
if hasattr(response, "asgi_send"):
await response.asgi_send(send)
else:
headers = {}
headers.update(response.headers)
headers["content-type"] = response.content_type
await send(
{
"type": "http.response.start",
"status": response.status,
"headers": [
[key.encode("utf-8"), value.encode("utf-8")]
for key, value in response.headers.items()
for key, value in headers.items()
],
}
)
@ -158,7 +161,7 @@ async def asgi_send_json(send, info, status=200, headers=None):
json.dumps(info),
status=status,
headers=headers,
content_type="application/json",
content_type="application/json; charset=utf-8",
)

View file

@ -106,7 +106,7 @@ class IndexView(BaseView):
headers["Access-Control-Allow-Origin"] = "*"
return response.HTTPResponse(
json.dumps({db["name"]: db for db in databases}, cls=CustomJSONEncoder),
content_type="application/json",
content_type="application/json; charset=utf-8",
headers=headers,
)
else:

View file

@ -18,7 +18,9 @@ class JsonDataView(BaseView):
if self.ds.cors:
headers["Access-Control-Allow-Origin"] = "*"
return response.HTTPResponse(
json.dumps(data), content_type="application/json", headers=headers
json.dumps(data),
content_type="application/json; charset=utf-8",
headers=headers,
)
else:

View file

@ -22,6 +22,7 @@ import urllib
def test_homepage(app_client):
response = app_client.get("/.json")
assert response.status == 200
assert "application/json; charset=utf-8" == response.headers["content-type"]
assert response.json.keys() == {"fixtures": 0}.keys()
d = response.json["fixtures"]
assert d["name"] == "fixtures"

View file

@ -17,6 +17,7 @@ import urllib.parse
def test_homepage(app_client_two_attached_databases):
response = app_client_two_attached_databases.get("/")
assert response.status == 200
assert "text/html; charset=utf-8" == response.headers["content-type"]
soup = Soup(response.body, "html.parser")
assert "Datasette Fixtures" == soup.find("h1").text
assert (