一、引入
對於想要利用django框架實現前后端分離的童鞋來說,首要的問題便是解決跨域請求的問題。何為跨域請求?簡單來說,就是當前發起的請求的域與該請求指向的資源所在的域不一致。當協議+域名+端口號均相同,那么就是同一個域。舉個例子,http://www.xxx.com發起了一個get請求,請求的地址是:http://www.xxx.com/getuserlist?u=test,這里就不存在跨域請求的問題。由於跨域請求存在諸多安全問題,例如CSRF攻擊等,所以我們的瀏覽器針對這個安全問題會有一個同源策略,必須是我們上面說到的同源請求,才能順利發出請求。
二、解決方案
其實解決同源問題的方法中,就我知道的有兩種:
1.JSONP,比較原始的方法,本質上是利用html的一些不受同源策略影響的標簽,諸如:<a>、<img>、<iframe>、<script>等,從而實現跨域請求,但是這種方法只支持GET的請求方式,也不是我今天所要介紹的方法;
2.CORS,Cross-Origin Resource Sharing,是一個新的 W3C 標准,它新增的一組HTTP首部字段,允許服務端其聲明哪些源站有權限訪問哪些資源。換言之,它允許瀏覽器向聲明了 CORS 的跨域服務器,發出 XMLHttpReuest 請求,從而克服 Ajax 只能同源使用的限制。在我們的django框架中就是利用CORS來解決跨域請求的問題。
三、Django中如何使用CORS(在此之前,我的PC已經安裝過python3了)
1.打開cmd,執行命令:pip install django-cors-headers
由於我已經安裝過了django-cors-headers,所以這里提示我已經安裝了,
2.修改django項目中的setting.py,
1 INSTALLED_APPS = [ 2 'django.contrib.admin', 3 'django.contrib.auth', 4 'django.contrib.contenttypes', 5 'django.contrib.sessions', 6 'django.contrib.messages', 7 'django.contrib.staticfiles', 8 'corsheaders',#這是我們的主角,放在新建的其他項目之前 9 'app01', 10 ] 11 MIDDLEWARE = [ 12 'django.middleware.security.SecurityMiddleware', 13 'django.contrib.sessions.middleware.SessionMiddleware', 14 'corsheaders.middleware.CorsMiddleware', #注意順序,必須放在這兒 15 'django.middleware.common.CommonMiddleware', 16 'django.middleware.csrf.CsrfViewMiddleware', 17 'django.contrib.auth.middleware.AuthenticationMiddleware', 18 'django.contrib.messages.middleware.MessageMiddleware', 19 'django.middleware.clickjacking.XFrameOptionsMiddleware', 20 ]
CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True #允許所有的請求頭 CORS_ALLOW_HEADERS = ('*')
3.效果,下左圖是沒有做相應的配置,有圖是做了配置之后
四、部分代碼
1.html部分
2.django部分