我正在寻找像Django的csrf_ignore
装饰者。
我已经通过订阅者
以通常的方式定义了我的csrf验证@subscriber(NewRequest)
def csrf_validation(event):
...
然后我有另一个接受POST图像上传的视图:
@view_config(route_name="upload_images", request_method="POST", renderer="json")
def upload_images(request):
...
但是如何忽略upload_images
视图的csrf验证?我正在使用Pyramid 1.3,如果有帮助的话。
答案 0 :(得分:3)
Pyramid 1.4支持check_csrf
本身的view_config
谓词。在此之前,您必须实现自己的自定义谓词来执行检查并将其应用于您的视图。
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):
# ....