欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django使用中間件解決前后端同源策略問題

 更新時(shí)間:2019年09月02日 08:17:01   作者:YifChan  
這篇文章主要介紹了Django使用中間件解決前后端同源策略問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

問題描述

前端時(shí)間在公司的時(shí)候,要使用angular開發(fā)一個(gè)網(wǎng)站,因?yàn)閍ngular很適合前后端分離,所以就做了一個(gè)簡單的圖書管理系統(tǒng)來模擬前后端分離。

但是在開發(fā)過程中遇見了同源策略的跨域問題,頁面能夠顯示,但是卻沒有數(shù)據(jù),顯示如下

右鍵檢查報(bào)錯(cuò)如下:

報(bào)錯(cuò)代碼如下

Failed to load http://127.0.0.1:8888/publisher/: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:4200' is therefore not allowed access.

angular從后端獲取數(shù)據(jù)的代碼如下:

private publishersUrl = 'http://127.0.0.1:8888/publisher/';
private addpubUrl = 'http://127.0.0.1:8888/addpub/';
getPublishers (): Observable<Publisher[]> {
  return this.http.get<Publisher[]>(this.publishersUrl)
  .pipe(
   catchError(this.handleError<Publisher[]>('getPublishers', []))
  ); 
}

問題原因

出現(xiàn)這個(gè)問題的原因是同源策略的跨域問題,關(guān)于這個(gè)問題不在此處詳細(xì)討論,如有興趣可以去搜索一下。

問題解決

解決這個(gè)問題關(guān)鍵在于后端,要允許其他網(wǎng)站進(jìn)行訪問,在這里我們可以定義一個(gè)中間件來解決這個(gè)問題,步驟如下。

1.在app下新建一個(gè)myMiddleware.py文件。

2.在文件中加入以下代碼

from django.utils.deprecation import MiddlewareMixin
class MyCore(MiddlewareMixin):
  def process_response(self, request, response):
    response['Access-Control-Allow-Origin'] = "*"
    if request.method == "OPTIONS":
      # 復(fù)雜請求 預(yù)檢
      response['Access-Control-Allow-Headers'] = "Content-Type"
      response['Access-Control-Allow-Methods'] = "POST, DELETE, PUT"
    return response

3.去settings文件中注冊中間件

MIDDLEWARE = [
  'BMS.myMiddleware.MyCore',
]

至此,這個(gè)問題就算解決了,我們可以將項(xiàng)目運(yùn)行起來看一下結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論