想要针对一个特定的帖子请求在opensx中禁用CSRF

时间:2019-04-16 06:32:18

标签: python django openedx

在opendx中,我已经使用Xblock.json_handler进行第三方api消费。但是我想为该后一个api禁用csrf身份验证,有人可以帮我吗?

1 个答案:

答案 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