Django提供後臺接口的跨域問題

--> Django跨域前端

當使用Django僅用來開發後端接口,爲前端提供JSON數據的時候,不可避免的要接受前端的POST請求。雖然Django以其強大易用的特定使用很普遍,但在跨域問題上卻讓人很糾結。django

若是不作任何設置,Django會給全部POST請求返回一個403csrf,以下圖後端

csrf

比較鬱悶的是Django卻沒有提供一個開關式的針對特定URL打開或關閉CSRF過濾的功能。屢次利用萬能的搜索後,終於找到一個高人的解決方案,自定義CSRF中間件,用re進行特定URL匹配後忽略CSRF,Mark到此處,以做備忘。跨域

1.在settings.py文件同級目錄下建立文件 helpers.pysession

 1 #FileName helpers.py
 2 
 3 import re
 4 class IgnoreCrsfMiddleware(object):
 5     def process_request(self, request, **karg):
 6         URL_LIST = [r'^/a/b/$', r'^/c/d/$']
 7         for u in URL_LIST:
 8             if re.match(u, request.path):
 9                 request.csrf_processing_done = True
10                 return None

2.在settings.py裏添加新增的中間件spa

 1 ...
 2 MIDDLEWARE_CLASSES = (
 3     'helpers.IgnoreCrsfMiddleware',
 4     'django.middleware.common.CommonMiddleware',
 5     'django.contrib.sessions.middleware.SessionMiddleware',
 6     'django.middleware.csrf.CsrfViewMiddleware',
 7     'django.contrib.auth.middleware.AuthenticationMiddleware',
 8     'django.contrib.messages.middleware.MessageMiddleware',
 9 )
10 '''

這樣以後,只要在helpers模塊裏的URL_LIST添加想忽略的URL模式便可。code

相關文章
相關標籤/搜索