Django提供后台接口的跨域问题

--> Django跨域

当使用Django仅用来开发后端接口,为前端提供JSON数据的时候,不可避免的要接受前端的POST请求。虽然Django以其强大易用的特定使用很广泛,但在跨域问题上却让人很纠结。

如果不做任何设置,Django会给所有POST请求返回一个403csrf,如下图

csrf

比较郁闷的是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模式即可。

posted on 2014-03-05 14:49  DeadLoop  阅读(2440)  评论(0编辑  收藏  举报