--> Django跨域前端
當使用Django僅用來開發後端接口,爲前端提供JSON數據的時候,不可避免的要接受前端的POST請求。雖然Django以其強大易用的特定使用很普遍,但在跨域問題上卻讓人很糾結。django
若是不作任何設置,Django會給全部POST請求返回一個403csrf,以下圖後端
比較鬱悶的是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