2024-10-05 14:31:58 发布
网友
我在找Django的csrf_ignore装饰器。在
csrf_ignore
我已通过订阅者以常规方式定义了csrf验证:
@subscriber(NewRequest) def csrf_validation(event): ...
然后我有另一个视图,它接受上传的POST图像:
但是如何忽略upload_images视图的csrf验证呢?我用金字塔1.3,如果有帮助的话。在
upload_images
Pyramid1.4本身支持check_csrf谓词。在此之前,您必须实现自己的自定义谓词来执行检查并将其应用于您的视图。在
check_csrf
在请求管道中,NewRequest订户很早就出现了,许多属性此时对您不可用。例如,它还没有计算出哪个路由匹配。因此,您只能真正做到if not request.path_info.startswith('/upload_image_path'):。在
NewRequest
if not request.path_info.startswith('/upload_image_path'):
您可以将检查推迟到ContextFound订户,在这种情况下,您可以检查if request.matched_route.name ~= 'upload_images'。在
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): # ....
Pyramid1.4本身支持
check_csrf
谓词。在此之前,您必须实现自己的自定义谓词来执行检查并将其应用于您的视图。在在请求管道中,
NewRequest
订户很早就出现了,许多属性此时对您不可用。例如,它还没有计算出哪个路由匹配。因此,您只能真正做到if not request.path_info.startswith('/upload_image_path'):
。在您可以将检查推迟到
ContextFound
订户,在这种情况下,您可以检查if request.matched_route.name ~= 'upload_images'
。在不过,最好的选择是将csrf检查显式地应用于各个视图,这可以使用自定义谓词来完成。在
相关问题 更多 >
编程相关推荐