已安装django-cors-headers仍遇跨域错误?求无插件解决方案
解决前端调用Bittrex API的跨域问题(无需插件)
首先得明确:你之前踩的坑是对django-cors-headers的作用理解偏了——它是用来解决你的Django后端和前端之间的跨域问题的,管不到第三方API(比如Bittrex)的CORS配置。你直接让前端请求Bittrex的接口,对方服务器根本没给你的域名开跨域权限,所以浏览器必然拦截,这和你装没装django-cors-headers没关系。
下面给你一个靠谱的无插件解决方案,本质是用你的Django后端做请求代理:
方案:Django后端转发请求
让前端请求你自己的Django接口,再由Django后端去调用Bittrex的API,最后把结果返回给前端。因为后端之间的请求不受浏览器跨域规则限制,完美避开这个问题。
步骤1:创建代理视图
在你的Django app的views.py里添加以下代码:
import requests from django.http import JsonResponse def bittrex_ticker_proxy(request): # 从前端获取market参数(支持动态传参,默认usdt-btc) market = request.GET.get('market', 'usdt-btc') # 构造Bittrex的API地址 bittrex_api_url = f"https://www.bittrex.com/api/v1.1/public/getticker?market={market}" try: # 后端发起请求到Bittrex response = requests.get(bittrex_api_url) # 把Bittrex的响应原封不动返回给前端 return JsonResponse(response.json(), safe=False) except Exception as e: # 处理请求异常(比如网络问题) return JsonResponse({'error': str(e)}, status=500)
步骤2:配置路由
在项目的urls.py里添加代理接口的路由:
from django.urls import path from your_app_name.views import bittrex_ticker_proxy # 替换成你的app名 urlpatterns = [ # 其他已有路由... path('api/proxy/bittrex-ticker/', bittrex_ticker_proxy, name='bittrex_ticker_proxy'), ]
步骤3:修改前端AJAX请求
把原来直接请求Bittrex的地址改成你的Django代理接口:
// 原来的错误写法 // $.ajax({ url: "https://www.bittrex.com/api/v1.1/public/getticker?market=usdt-btc", ... }) // 修改后的正确写法 $.ajax({ url: "/api/proxy/bittrex-ticker/?market=usdt-btc", method: "GET", success: function(data) { console.log("获取到行情数据:", data); // 这里处理你的业务逻辑 }, error: function(err) { console.error("请求失败:", err); } });
额外提醒
- 确保你的Django环境安装了
requests库,没装的话执行pip install requests - 如果需要调用更多Bittrex接口,可以扩展这个代理视图,或者写一个通用的代理函数
- 建议给代理请求加缓存(比如用Django的缓存框架),避免频繁请求第三方API,减轻服务器压力
内容的提问来源于stack exchange,提问作者indexOutOfBounds
相关产品推荐
相关产品推荐

