金字塔忽略某些视图的csrf验证

2024-10-05 14:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在找Django的csrf_ignore装饰器。在

我已通过订阅者以常规方式定义了csrf验证:

@subscriber(NewRequest)
def csrf_validation(event):
    ...

然后我有另一个视图,它接受上传的POST图像:

^{pr2}$

但是如何忽略upload_images视图的csrf验证呢?我用金字塔1.3,如果有帮助的话。在


Tags: django图像event视图定义def方式装饰
1条回答
网友
1楼 · 发布于 2024-10-05 14:31:58

Pyramid1.4本身支持check_csrf谓词。在此之前,您必须实现自己的自定义谓词来执行检查并将其应用于您的视图。在

在请求管道中,NewRequest订户很早就出现了,许多属性此时对您不可用。例如,它还没有计算出哪个路由匹配。因此,您只能真正做到if not request.path_info.startswith('/upload_image_path'):。在

您可以将检查推迟到ContextFound订户,在这种情况下,您可以检查if request.matched_route.name ~= 'upload_images'。在

不过,最好的选择是将csrf检查显式地应用于各个视图,这可以使用自定义谓词来完成。在

def csrf_check(context, request):
    # do check, return True if passes, or raise some exception if fails

@view_config(..., custom_predicates=[csrf_check])
def not_upload_images(request):
    # ....

相关问题 更多 >