Django解決跨域請求的問題


一、引入

  對於想要利用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部分

         

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM