在opendx中,我已经使用Xblock.json_handler进行第三方api消费。但是我想为该后一个api禁用csrf身份验证,有人可以帮我吗?
答案 0 :(得分:0)
他们有很多方法可以做到这一点。但是请记住,除非您将不会在全局级别禁用CSRF, 喜欢创建自己的自定义中间件。 参见documentation
1。)使用csrf_exempt方法
如果您希望某些视图不使用CSRF,则可以使用 @csrf_exempt 。 将 @csrf_exempt 添加到要禁用的每个视图中
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def my_view(request):
return 'CSRF is disabled for this view'
2。)使用setting.py配置
在MIDDLEWARE中的setting.py中,您只需删除/注释以下代码行即可:
'django.middleware.csrf.CsrfViewMiddleware',
请记住,SessionAuthentication执行自己的CSRF验证。这将触发CSRF丢失错误 如果在使用sessionAuthentication时进行了评论。
3.) Creating your own Custom Middleware
要在Global中禁用CSRF,您可以编写这样的自定义中间件
from django.utils.deprecation import MiddlewareMixin
class DisableCsrfCheck(MiddlewareMixin):
def process_request(self, req):
attr = '_dont_enforce_csrf_checks'
if not getattr(req, attr, False):
setattr(req, attr, True)
然后添加此类
yourApp_name.middlewarefilename.DisableCsrfCheck
到
MIDDLEWARE_CLASSES lists
,
之前
django.middleware.csrf.CsrfViewMiddleware