解決Django 前後端分離跨域問題

2021-10-21 16:42:47 字數 3496 閱讀 3457

瀏覽器的同源策略:同源策略是一種瀏覽器最基本的安全機制,如果兩個 url 的 protocol、port (如果有指定的話)和 host 都相同的話,則這兩個 url 是同源。

支援python 3.6至3.9。

支援django 2.2到3.2。

1、從pip安裝:

pip install django-cors-headers
2、修改settings.py:

...'django.contrib.staticfiles',

'corsheaders', # 放在新建應用前

...]

middleware = [

'django.middleware.security.securitymiddleware',

'django.contrib.sessions.middleware.sessionmiddleware',

'corsheaders.middleware.corsmiddleware', # 注意位置

'django.middleware.common.commonmiddleware',

'django.middleware.csrf.csrfviewmiddleware',

...]

在django設定中配置中介軟體的行為。必須至少設定以下三個之一:

格式為uri+主機名+埠

「 ]之前版本,此設定稱為cors_origin_whitelist,該設定仍用作別名,新名稱優先。

cors_allowed_origin_regexes:表示正規表示式的字串列表,與被授權發出跨站點http請求的origins相匹配。預設為。

當 cors_allowed_origins不可行時很有用。

]之前版本,此設定稱為cors_origin_regex_whitelist,該設定仍用作別名,新名稱優先。

cors_allow_all_origins:如果為true,則將允許所有原點。限制允許的原點的其他設定將被忽略。預設為false。

之前版本,此設定稱為cors_origin_allow_all,該設定仍用作別名,新名稱優先。

cors_urls_regex:正規表示式,用於限制將為其傳送cors標頭的url。

cors_urls_regex  =  r '^ / api /.*$'
cors_allow_methods:實際請求所允許的http動詞列表。

cors_allow_methods  =  [ 

'delete' ,

'get' ,

'options' ,

'patch' ,

'post' ,

'put' ,

]

cors_allow_headers:發出實際請求時可以使用的非標準http標頭的列表。

cors_allow_headers  =  [ 

''accept' ,

'accept-encoding' ,

'authorization' ,

'content-type' ,

'dnt' ,

'origin' ,

'user-agent' ,

'x-csrftoken' ,

'x-requested-with' ,

]

1、csrf_trusted_origins設定
cors_allowed_origins  =  [ 

'' ,

'' ,

] csrf_trusted_origins = [

'change.allowed.com' ,

]

2、中介軟體設定:

middleware_classes  =  [ 

...

'corsheaders.middleware.corsmiddleware' ,

...

'django.middleware.csrf.csrfviewmiddleware' ,

'corsheaders.middleware.corspostcsrfmiddleware' ,

...

]

# cors.py

"""解決跨域問題的中介軟體,作用全域性"""

class middlewaremixin(object):

def __init__(self, get_response=none):

self.get_response = get_response

super(middlewaremixin, self).__init__()

def __call__(self, request):

response = none

if hasattr(self, 'process_request'):

response = self.process_request(request)

if not response:

response = self.get_response(request)

if hasattr(self, 'process_response'):

response = self.process_response(request, response)

return response

class corsmiddleware(middlewaremixin):

def process_response(self, request, response):

# 新增響應頭

# 限制哪些網域名稱可以訪問,用逗號分隔,如果全部可使用'*'

response['access-control-allow-origin'] = '*'

# 限制攜帶的請求頭,用逗號分隔

response['access-control-allow-headers'] = 'content-type'

# 允許傳送的請求方式

response['access-control-allow-methods'] = 'delete, put'

return response

在settings註冊中介軟體 

middleware = [

......

]

django前後端分離解決跨域

1.安裝虛擬環境 mkvirtualenv dj admin 環境名 若系統中存在多個python版本在環境名前需指定python版本 2.配置虛擬環境,安裝django pip install django 安裝依賴包 3.進入虛擬環境 workon 環境名退出虛擬環境 deactivate 檢視...

解決前後端分離的跨域問題

參考 跨域是網路安全領域的乙個專有名詞。簡單點理解就是某些操作越過了網域名稱的界限,訪問了別的網域名稱。如果指令碼可以自由訪問其他域,就會產生很多安全問題。什麼情況下會跨域?不同協議 不同網域名稱 不同埠 不同主機。什麼情況不是跨域?滿足網域名稱 協議 埠均相同的即不是跨域。解決方案 1 jsonp...

前後端分離專案,請求跨域解決

前端傳送請求,產生跨域問題 created 控制台報錯 在後端設定允許跨域請求 package com.demo.demobackend.config import org.springframework.context.annotation.bean import org.springframew...