django-cors-headers实现跨域的方法总结
在setting.py中配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cas_ng',
'DjangoUeditor',
'corsheaders',
]
MIDDLEWARE_CLASSES = [
'corsheaders.middleware.CorsMiddleware', #这个放到第一位
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
"corsheaders.middleware.CorsPostCsrfMiddleware",
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_cas_ng.middleware.CASMiddleware',
]
settings.py中添加:
CORS_ALLOWED_ORIGINS = [
"http://xxxxxxx" , #发起请求的URL要求添加端口和http
]
注意:
MIDDLEWARE_CLASSES = []
和
MIDDLEWARE= []
Django中的settings.py设置是MIDDL
EWARE,而这需要添加在MIDDLEWARE_CLASSES ,否则django-cors-headers的配置就不生效!所以始终都无法实现跨域,后来查资料才发现,修改为:
MIDDLEWARE_CLASSES = [
'corsheaders.middleware.CorsMiddleware', #这个放到第一位
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
"corsheaders.middleware.CorsPostCsrfMiddleware",
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_cas_ng.middleware.CASMiddleware',
]
MIDDLEWARE= [
'corsheaders.middleware.CorsMiddleware', #这个放到第一位
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
"corsheaders.middleware.CorsPostCsrfMiddleware",
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_cas_ng.middleware.CASMiddleware',
]
实现跨域成功:
注意:MIDDLEWARE也必须要添加,否则报错:'WSGIRequest' object has no attribute 'session',session无法获取!这是第二天登录后台才发现这个问题,记录之!
settings.py配置文件总结:
一共设置4处:
INSTALLED_APPS、MIDDLEWARE_CLASSES(注意配置项尽可能放在最前)、CORS_ALLOWED_ORIGINS、CSRF_TRUSTED_ORIGINS分别添加白名单,注意URL的格式。
启用此功能corsheaders.middleware.CorsPostCsrfMiddleware后django.middleware.csrf.CsrfViewMiddleware,还应该在之后 添加,MIDDLEWARE_CLASSES以撤消Referer替换.
如果出现下面问题
ModuleNotFoundError: No module named 'corsheaders'
运行Django项目的时候出现了这个问题,这个问题是Django跨域问题,安装django-cors-headers就可以解决这个跨域的问题。
pip install django-cors-headers
但是如果仍然有问题,那就是你的那个python Django的环境有问题了。
这个时候你需要去仔细地检查自己的python环境
或者下面的原因
应用是否在开发环境中进行注册?
INSTALLED_APPS = (
...
'corsheaders', # 注意:如果应用不是在最后一行,注册完一定不要忘记加上逗号噢,不然是会报错的
...
)