使用Django 1.7,每当我在视图中返回以下JsonResponse时:
from django.http import JsonResponse
token = "1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9="
response = JsonResponse({"token": token})
return response
Run Code Online (Sandbox Code Playgroud)
我从Web浏览器/ cURL获得以下HTTP响应:
"{\"token\": \"1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9=\"}"
Run Code Online (Sandbox Code Playgroud)
我想要的,以及我在Django 1.3中所拥有的是:
{"token": "1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9="}
Run Code Online (Sandbox Code Playgroud)
我有两个依赖于使用Django的私有API的移动应用程序,不幸的是他们期待第二种响应,没有额外的引号(围绕整个JSON的引号使它成为一个字符串)并且没有引用转义.
我的问题是,有没有一些内置的方法来强制Django响应不逃避JSON响应?
我编写了以下中间件来实现它,但是......它似乎是一种非常脆弱的蛮力方式:
class UnescapeJSON(object):
def process_response(self, request, response):
"""
Directly edit response object here, searching for and replacing terms
in the html.
"""
if re.search('^/api/.*', request.path):
r = response.content
r = r.replace('\\', '')
r = r.lstrip('"')
r = r.rstrip('"')
response.content = r
return response
Run Code Online (Sandbox Code Playgroud)
所以我希望有一个更聪明的方法.
背景故事是我正在尝试将旧的遗留代码库从Django 1.3更新为1.8.我目前在我的本地开发环境中使用1.7.Django 1.3以正确的方式返回JSON,没有额外的引号和反斜杠.
以这种方式返回JSON是一件好事:
{"token": "1$aEJUhbdpO3cNrXUmFgvuR2SkXTP9="}
Run Code Online (Sandbox Code Playgroud)
...是我jQuery.post({success:...})用来处理这个JSON响应,它会自动jQuery.parseJSON()为我运行,把它变成一个我可以用点表示法访问的JSON对象. …
我的问题是在一个域下托管Django和Wordpress,但是有两台物理机器(实际上,它们是虚拟机但是差异相同).
假设我在example.com上有一个Django webapp.我想创建一个关于我的webapp的Wordpress博客,所以任何博客页面排名mojo都会回流到我的webapp,我希望博客地址是example.com/blog.我的理解是blog.example.com不会转移所述页面排名mojo.
因为我担心Wordpress安全漏洞会破坏我的Django webapp,所以我想在两台物理上分开的机器上托管Django和Wordpress.
鉴于此,是否可以使用重写规则或反向代理服务器来执行此操作?我知道简单的方法是让我的Wordpress博客成为子域名,但我真的不想这样做.
过去有没有人这样做过,它稳定吗?如果我需要第三台服务器作为专用的反向代理,那就完全没问题了.
谢谢!