qidao123.com技术社区-IT企服评测·应用市场

标题: React Axios + Django 跨域解决方案详解 [打印本页]

作者: 用户国营    时间: 2025-4-28 08:36
标题: React Axios + Django 跨域解决方案详解
一、Django 后端配置(Python)

1.1 安装 CORS 中间件

  1. pip install django-cors-headers
复制代码
1.2 配置 settings.py

  1. # settings.py
  2. # 核心配置项
  3. INSTALLED_APPS = [
  4.     ...
  5.     'corsheaders',  # 新增应用
  6. ]
  7. MIDDLEWARE = [
  8.     ...
  9.     'corsheaders.middleware.CorsMiddleware',  # 必须放在最前
  10.     'django.middleware.common.CommonMiddleware',
  11. ]
  12. # 跨域配置
  13. CORS_ALLOWED_ORIGINS = [
  14.     "http://localhost:3000",  # React开发地址
  15.     "https://your-production-domain.com",
  16. ]
  17. # 允许携带Cookie
  18. CORS_ALLOW_CREDENTIALS = True
  19. # 允许的自定义请求头
  20. CORS_ALLOW_HEADERS = [
  21.     'content-type',
  22.     'authorization',
  23.     'x-csrftoken',  # Django CSRF需要
  24. ]
  25. # 允许的HTTP方法
  26. CORS_ALLOW_METHODS = [
  27.     'GET',
  28.     'POST',
  29.     'PUT',
  30.     'PATCH',
  31.     'DELETE',
  32.     'OPTIONS'
  33. ]
  34. # Cookie安全配置(生产环境必须)
  35. SESSION_COOKIE_SAMESITE = 'None'  # 允许跨站
  36. SESSION_COOKIE_SECURE = True      # 仅HTTPS传输
  37. CSRF_COOKIE_SAMESITE = 'None'
  38. CSRF_COOKIE_SECURE = True
  39. # 生产环境域名白名单
  40. ALLOWED_HOSTS = [
  41.     '.your-domain.com',
  42.     'localhost',
  43.     '127.0.0.1'
  44. ]
复制代码
1.3 视图示例(views.py)

  1. from django.http import JsonResponse
  2. from django.views.decorators.csrf import ensure_csrf_cookie
  3. @ensure_csrf_cookie  # 确保返回CSRF Token
  4. def user_info(request):
  5.     if request.method == 'GET':
  6.         return JsonResponse({
  7.    
  8.             'username': request.user.username,
  9.             'is_authenticated': request.user.is_authenticated
  10.         })
复制代码
<hr> 二、React 前端配置(Axios)

2.1 创建 Axios 实例

  1. // src/api/axios.js
  2. import axios from 'axios';
  3. const axiosInstance = axios.create({
  4.    
  5.   baseURL: process.env.REACT_APP_API_BASE_URL,
  6.   withCredentials: true, // 关键配置:允许携带Cookie
  7.   headers: {
  8.    
  9.     'Content-Type': 'application/json',
  10.     'X-Requested-With': 'XMLHttpRequest'
  11.   }
  12. });
  13. // 请求拦截器(添加CSRF Token)
  14. axiosInstance.interceptors.request.use(
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4