DjangoAjax代理视图

DjangoAjax代理视图,ajax,django,proxy,view,Ajax,Django,Proxy,View,django web应用程序需要对外部url进行ajax调用。在开发中,我直接从django服务,所以我有一个跨领域的问题。django为ajax调用编写代理的方法是什么?您问的关于如何在django中编写视图的问题是否正确,该视图可以接受传入的ajax请求,向远程服务器发出请求,然后将收到的响应返回到浏览器 如果是这样的话,那么这就不是Django特有的问题——远程调用可以使用Python的或来完成,然后您只需输入: return HttpResponse(received_response

django web应用程序需要对外部url进行ajax调用。在开发中,我直接从django服务,所以我有一个跨领域的问题。django为ajax调用编写代理的方法是什么?

您问的关于如何在django中编写视图的问题是否正确,该视图可以接受传入的ajax请求,向远程服务器发出请求,然后将收到的响应返回到浏览器

如果是这样的话,那么这就不是Django特有的问题——远程调用可以使用Python的或来完成,然后您只需输入:

 return HttpResponse(received_response)

--在Django代理视图中。我假设这里没有响应处理,因为如果它只是AJAX调用的代理,那么JavaScript需要未处理的数据。

我自己回答这个问题时遇到了这个问题,发现了这个Django应用程序:

…这对于我所需要的东西来说有点重(录制和播放,需要一个syncdb来添加模型内容)。但是您可以在其基于
httplib2
的通用代理视图中看到它使用的代码:

这里有一个简单的Django代理实现

从django.http导入HttpResponse
导入模拟类型
导入urllib2
def proxy_to(请求、路径、目标url):
url=“%s%s%”(目标url,路径)
如果request.META.has_key('QUERY_STRING'):
url+='?'+请求.META['QUERY\u STRING']
尝试:
代理的_请求=urllib2.urlopen(url)
状态\u代码=代理的\u请求代码
mimetype=proxied_request.headers.typeheader或mimetypes.guess_type(url)
content=proxied_request.read()
除了urllib2.HTTPError作为e:
返回HttpResponse(e.msg,status=e.code,mimetype='text/plain')
其他:
返回HttpResponse(内容,状态=状态\代码,mimetype=mimetype)
这将代理从代理路径+路径到目标URL+路径的请求。 通过向URL.py添加如下URL模式来启用和配置代理:

url(r'^PROXY\u PATH/(?P.*),PROXY\u to,{'target\u url':'target\u url}),
例如:

url(r'^images/(?P.*)$),代理到,{'target'url':'http://imageserver.com/'}),
将向http://localhost:8000/images/logo.png 获取并返回位于的文件http://imageserver.com/logo.png.

查询字符串被转发,而诸如cookies和POST数据之类的HTTP头则不被转发(如果需要的话,很容易添加)


注:这主要用于开发用途。在生产环境中处理代理的正确方法是使用HTTP服务器(例如Apache或Nginx)。

我还没有测试过这一点,但我相信这段代码只会复制响应正文,而不会复制响应的HTTP头,其中可能包含来自服务器的大量有用信息。关键是传递cookie和POST数据,因此,您可以简单地编写代码,而不是告诉我们添加cookie和POST数据很容易,是的,也许您可以添加传递cookie和POST数据的部分?