gpt4 book ai didi

ajax - django ajax 代理 View

转载 作者:行者123 更新时间:2023-12-04 07:29:54 25 4
gpt4 key购买 nike

django Web 应用程序需要对外部 url 进行 ajax 调用。在开发中,我直接从 django 提供服务,所以我遇到了跨域问题。为ajax调用编写代理的django方式是什么?

最佳答案

这是一个非常简单的 Django 代理实现。

from django.http import HttpResponse
import mimetypes
import urllib2

def proxy_to(request, path, target_url):
url = '%s%s' % (target_url, path)
if request.META.has_key('QUERY_STRING'):
url += '?' + request.META['QUERY_STRING']
try:
proxied_request = urllib2.urlopen(url)
status_code = proxied_request.code
mimetype = proxied_request.headers.typeheader or mimetypes.guess_type(url)
content = proxied_request.read()
except urllib2.HTTPError as e:
return HttpResponse(e.msg, status=e.code, mimetype='text/plain')
else:
return HttpResponse(content, status=status_code, mimetype=mimetype)

这将请求从 PROXY_PATH+path 代理到 TARGET_URL+path。
通过向 urls.py 添加这样的 URL 模式来启用和配置代理:

url(r'^PROXY_PATH/(?P<path>.*)$', proxy_to, {'target_url': 'TARGET_URL'}),

例如:

url(r'^images/(?P<path>.*)$', proxy_to, {'target_url': 'http://imageserver.com/'}),

将请求 http://localhost:8000/images/logo.png 获取并返回位于 http://imageserver.com/logo.png 的文件。

查询字符串会被转发,而诸如 cookie 和 POST 数据之类的 HTTP header 不会被转发(如果需要,添加它很容易)。

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

关于ajax - django ajax 代理 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com