Django后端解决跨域请求(CORS)问题的实现方法
要解决跨域请求问题(CORS),你需要在后端配置允许跨域请求的响应头。在 Django 中,可以使用库来轻松处理跨域请求。
要解决跨域请求问题(CORS),你需要在后端配置允许跨域请求的响应头。在 Django 中,可以使用 django-cors-headers
库来轻松处理跨域请求。
解决方案
-
安装
django-cors-headers
库首先,你需要安装
django-cors-headers
库。你可以通过 pip 安装:pip install django-cors-headers
-
配置
settings.py
在
settings.py
文件中,添加corsheaders
到INSTALLED_APPS
,并在MIDDLEWARE
中添加CorsMiddleware
。确保CorsMiddleware
在CommonMiddleware
之前。INSTALLED_APPS = [ ... 'corsheaders', ... ] MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ] # 允许所有域名跨域访问 CORS_ALLOW_ALL_ORIGINS = True # 如果你只想允许特定的域名跨域访问,可以使用以下配置 # CORS_ALLOWED_ORIGINS = [ # "http://localhost:63342", # "https://yourdomain.com", # ]
•
CORS_ALLOW_ALL_ORIGINS = True
允许所有域名跨域访问。
•CORS_ALLOWED_ORIGINS
允许你指定允许跨域访问的域名列表。 -
重启 Django 服务
修改完
settings.py
后,重启你的 Django 服务以使配置生效。
如果你不想使用 django-cors-headers
库
如果你不想使用第三方库,也可以手动在视图函数中添加 CORS 头。不过这种方式不够灵活,且容易出错。
from django.http import JsonResponse
def generator_bid_document(request):
ai_upload_service = AIUploadService()
ai_ready_call_directory = None
try:
uploaded_file, file_name, model_label = ai_upload_service.extract_file_and_metadata(request)
ai_ready_call_directory, full_ready_call_ai_file_path = ai_upload_service.save_uploaded_file_to_ai_ready_directory(uploaded_file, file_name)
response = ai_upload_service.process_pdf_and_generate_word(full_ready_call_ai_file_path, model_label)
# 手动添加 CORS 头
response['Access-Control-Allow-Origin'] = '*'
return response
except Exception as e:
errmsg = str(e)
logger.error(errmsg)
response = JsonStateResponse(errcode=ErrorCode.Failure, errmsg=errmsg)
response['Access-Control-Allow-Origin'] = '*'
return response
finally:
ai_upload_service.remove_ready_call_ai_directory_path(ai_ready_call_directory)
注意事项
• 安全性:CORS_ALLOW_ALL_ORIGINS = True
允许所有域名跨域访问,这在生产环境中是不安全的。建议在生产环境中使用 CORS_ALLOWED_ORIGINS
来指定允许的域名。
• OPTIONS 请求:跨域请求通常会先发送一个 OPTIONS
请求来检查服务器是否允许跨域请求。确保你的后端正确处理 OPTIONS
请求。
使用 django-cors-headers
的推荐方式
使用 django-cors-headers
是更推荐的方式,因为它提供了更多的配置选项,并且能够正确处理 OPTIONS
请求。
# settings.py
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
CORS_ALLOWED_ORIGINS = [
"http://localhost:63342",
# 添加其他允许的域名
]
这样配置后,你的 Django 应用将允许来自 http://localhost:63342
的跨域请求,并且浏览器将不再报 CORS 错误。
更多推荐
所有评论(0)