python - 想要在openxx中为一个特定的post请求禁用CSRF
问题描述
在 openx 中,我使用 Xblock.json_handler 进行第三方 api 消费。但是我想为那个帖子 api 禁用 csrf 身份验证,有人可以帮我解决这个问题吗?
解决方案
他们有很多方法可以做到这一点。但是请记住,除非您想创建自己的自定义中间件,否则您不能在全局级别禁用 CSRF。见文档
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 验证。如果在使用 sessionAuthentication 时评论,这将触发 CSRF 丢失错误。
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
推荐阅读
- javascript - 有没有办法从一开始就制作动画 gif 播放?
- python - 使用布局切片时,Django 脆皮表单“提供给 {%crispy %} 标签的帮助对象必须是一个crispy.helper.FormHelper 对象”
- python - 为什么不应该在 Django 的生产级使用 MEDIA_ROOT 和 MEDIA_URL?
- python-3.x - ruamel yaml 禁用转储别名
- reactjs - MongoDB - Next.js 我无法映射数据
- random - 从 Tarantool 空间获取 1 条随机记录
- android - 未解决的参考 - 活动无法识别 android studio v4 中的合成导入
- java - 关于覆盖jpanelpaintcomponent和相对位置
- c# - 如何在代码中编写 RenderFragment ChildContent
- python - 在不同条件下更改 pandas df 中的列值/在 4 点 likert-scale 上反转答案