我正在尝试创建中间件,以便可选地将kwarg传递给满足条件的每个视图.
问题是我找不到如何设置中间件的示例.我见过的类覆盖了我想要的方法,process_view:
Class CheckConditionMiddleware(object):
def process_view(self, request):
return None
Run Code Online (Sandbox Code Playgroud)
但是我把这个课程放在哪里?我是否创建了一个中间件应用程序并将此类放在其中,然后在settings.middleware中引用它?
我收到以下错误:
Access to XMLHttpRequest at 'http://127.0.0.1:8000/' from origin 'http://localhost:62570' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.
我尝试添加django-cors-headers中间件,并且CORS_ALLOW_ALL_ORIGINS = True
我也做了ALLOWED_HOSTS = ['*']
但仍然遇到相同的 CORS 错误。我在 NestJS 中遇到了同样的错误,但添加后app.enableCors();
它得到了解决。
这是我的settings.py
文件:
from pathlib import Path
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
DEBUG = True
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'rest_framework',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', …
Run Code Online (Sandbox Code Playgroud) python django cors django-rest-framework django-cors-headers
我的 Django Rest Framework 和 React 应用程序在同一台服务器上存在 CORS 问题。我正在运行带有 Ubuntu 18 机器和 NGINX 的 Vagrant(我假设这个问题会转化为 DigitalOcean)如果我提供了太多信息,我提前道歉。DRF 使用 Supervisor,Gunicorn 使用端口 8000。我使用 create-react-app 创建了我的 React 应用程序。然后我用来npm run build
创建静态文件。
NGINX 设置:
反应会议
server {
listen 8080;
server_name sandbox.dev;
root /var/sites/sandbox/frontend/build;
index index.html;
client_max_body_size 4G;
location / {
try_files $uri $uri/ /index.html;
}
Run Code Online (Sandbox Code Playgroud)
姜戈会议
upstream sandbox_server {
server unix:/var/tmp/gunicorn_sanbox.sock fail_timeout=0;
}
server {
listen 8000;
server_name api.sandbox.dev;
...
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) …
Run Code Online (Sandbox Code Playgroud) 我无法在Django API中解决CORS问题。调用此API时,出现错误:
从源' http:// localhost '的' http:// localhost:8000 / '处获取的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-来源的标头出现在请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。
为了启用CORS,我做pip install django-cors-headers
了以下代码,并将其添加到settings.py
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
]
MIDDLEWARE_CLASSES = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_WHITELIST = [
'localhost:80',
'localhost:8000',
'127.0.0.1:8000'
]
Run Code Online (Sandbox Code Playgroud)
我应该说我在Docker上运行我的项目。这是docker-compose.yml
:
version: '2'
services:
django-docker:
build:
context: .
dockerfile: Dockerfile.django
container_name: my.django
image: my-django
ports:
- 8000:8000
webapp-docker:
build:
context: .
dockerfile: Dockerfile.webapp
container_name: my.webapp
image: my-web
ports: …
Run Code Online (Sandbox Code Playgroud) 我使用此URL http://192.168.33.10:8002/scenarios/创建了一个可以使用django-rest-framework创建的restful api,我正在创建一个React应用程序来调用api并消耗其数据.
我正在使用fetch来调用api
componentWillMount: function(){
this.setState({Problemstyle: this.props.Problemstyle})
fetch('http://192.168.33.10:8002/scenarios/')
.then(result=>result.json())
.then(result=> {
this.steState({items:result})
})
},
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,我的浏览器出错
Fetch API无法加载http://192.168.33.10:8002/scenarios/.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源" http://192.168.33.10:8001 ".如果不透明响应满足您的需求,请将请求的模式设置为"no-cors"以获取禁用CORS的资源.
我不确定如何解决这个问题,因为我刚刚开始使用React