Django提供后台接口的跨域问题
--> Django跨域
当使用Django仅用来开发后端接口,为前端提供JSON数据的时候,不可避免的要接受前端的POST请求。虽然Django以其强大易用的特定使用很广泛,但在跨域问题上却让人很纠结。
如果不做任何设置,Django会给所有POST请求返回一个403csrf,如下图
比较郁闷的是Django却没有提供一个开关式的针对特定URL打开或关闭CSRF过滤的功能。多次利用万能的搜索后,终于找到一个高人的解决方案,自定义CSRF中间件,用re进行特定URL匹配后忽略CSRF,Mark到此处,以作备忘。
1.在settings.py文件同级目录下创建文件 helpers.py
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里添加新增的中间件
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模式即可。