【问题标题】:Django and React : Error Message " You need to enable JavaScript to run this app. " instead of JsonDjango 和 React:错误消息“您需要启用 JavaScript 才能运行此应用程序。”而不是 Json
【发布时间】:2021-02-06 06:44:45
【问题描述】:

我是 React 新手,我尝试让 Django Rest 和 react 一起工作。

顺便说一句,我的 javascript 已启用。

我有一个简单的看法:

class StudentView(generics.ListCreateAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

我尝试从 react with 中获取它:

  useEffect(() =>{
    fetch("http://127.0.0.1:8000/secretariat/get_student/", {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })
    .then( resp => resp.json())
    .then( resp => setStudents(resp))
    .catch(error => console.log(error))
    
  }, [])

当我在浏览器网络中检查时,这就是我所拥有的响应:

我不认为我有 CORS 标头问题,但这里是我的 CORS 设置。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'corsheaders',
    'common_app',
    'rest_framework',
    'rest_framework.authtoken',
    'allauth.account',
    'rest_auth.registration',
    'ldap',
    'rest_auth',
    'simple_history',

]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'simple_history.middleware.HistoryRequestMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = False

CORS_ORIGIN_WHITELIST = (
    'http://127.0.0.1'
)
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

我认为我做错了什么,但我不知道。

谢谢

【问题讨论】:

  • 设置 CORS_ORIGIN_ALLOW_ALL = True 并评论其他 CORS 设置以检查 cors 是否导致问题
  • 这似乎不是 CORS 的问题。似乎是您的 Web 应用程序中或两者之间的某些东西启用了 JS 挑战。如果您使用 cloudflare 之类的东西,但当您连接到本地主机时,它可能是代理或一些提供 JS 挑战的 django 应用程序。
  • 其实这似乎是一个CORS问题。我在控制台中记录了响应,我不知何故循环回到我的反应应用程序。所以我得到的信息是来自反应的信息。现在,当我正确联系我的 API 时,我有“从原点 'localhost:3000' 获取 '127.0.0.1:8000/secretariat/get_student' 的访问权限已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否'访问控制-Allow-Origin' 请求的资源上存在标头。如果不透明的响应满足您的需求,请将请求的模式设置为 ....."
  • 我将 CORS 更改为 CORS_ORIGIN_ALLOW_ALL = True ALLOWED_HOSTS = ['*'] 但我的应用仍然拒绝该请求

标签: javascript python-3.x reactjs django django-rest-framework


【解决方案1】:

好吧,我真的不知道为什么,但我完全不用更改我的 CORS 设置就让它与 Axios 一起工作。如果有人知道为什么它使用 axios 而不是 fetch,我想知道。

所以如果它发生在其他人身上,工作代码会使用 axios 做出反应:

  axios.get("http://127.0.0.1:8000/secretariat/get_student/")
    .then(response => {
      console.log(response)
      })
    .catch(error => {
      console.log(error);
    })

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2018-02-18
    • 1970-01-01
    • 2019-12-16
    • 2022-11-30
    • 2021-10-05
    • 2020-04-02
    • 2020-05-09
    • 2022-06-14
    相关资源
    最近更新 更多