django tastypie和跨域json

Rob*_*b B 9 django json node.js express

在localhost:8000上运行django dev服务器,在localhost:3000上运行nodejs服务器.我想将json导入nodejs服务器,但我收到此错误:

XMLHttpRequest无法加载 http://127.0.0.1:8000/api/presentation/?format=json.Access-Control-Allow-Origin不允许使用origin http:// localhost:3000

这是我第一次涉足跨领域的乐趣,所以我很想走出我的深度.

我已将此添加到节点(expressjs)中的路由中.

app.all('/', function(req, res){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.render('index', {
    title: '...'
  });
});
Run Code Online (Sandbox Code Playgroud)

我错过了什么/做错了什么?

mik*_*iku 10

数据提供者需要为跨域请求设置策略(而不是客户端,正如您的快递片段所示).

有人发布了一个带有简单Django中间件的要点,负责注入所需的头文件:

允许您的django服务器适当地响应跨域XHR(postMessage html5 API)的Middlware.

  • 我正在使用要点,但对我不起作用.尝试通过简单的jquery加载由django/python后端暴露的简单json.我也在使用$ .getJSON方法.并且还在我的中间件设置中添加了所提到的中间件.什么可能是错的?是否必须添加中间件的特定顺序?或者我是否还需要在每个响应中明确设置标头?(似乎看起来像中间件的代码).或者我是否需要修改它以使用json mimetype?提前致谢. (2认同)

zza*_*art 6

https://gist.github.com/426829 - 此片段非常有用,但是使用骨干到django服务器进行POST时,我必须根据请求匹配Access-Control-Request-Headers标头,并在响应时使用Access-Control-Allow-Headers.

咖啡:

auth = (xhr) ->
xhr['xhrFields']= {withCredentials: true}
xhr.setRequestHeader('Access-Control-Allow-Credentials', 'true' )
xhr.header('Access-Control-Allow-Origin', "*")
xhr.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS')
xhr.header('Access-Control-Allow-Headers', 'Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control')  
Run Code Online (Sandbox Code Playgroud)

python:https://gist.github.com/426829有一个额外的行

def process_request(self, request):

    if 'HTTP_ACCESS_CONTROL_REQUEST_METHOD' in request.META:
        response = http.HttpResponse()
        response['Access-Control-Allow-Origin']  = XS_SHARING_ALLOWED_ORIGINS
        response['Access-Control-Allow-Methods'] = ",".join( XS_SHARING_ALLOWED_METHODS )
        response['Access-Control-Allow-Headers'] = "Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"
        return response

    return None          
Run Code Online (Sandbox Code Playgroud)

希望这很有用!