我正在寻找类似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,如果有帮助的话。 最佳答案
Pyramid 1.4附带了对check_csrf
谓词的支持。在此之前,您将必须实现自己的自定义谓词来进行检查并将其应用于视图。view_config
订户在请求管道中很早就发生了,此时您无法使用许多属性。例如,它尚未计算出匹配的路线。因此,您只能真正执行NewRequest
。
您可以将支票推迟到if not request.path_info.startswith('/upload_image_path'):
个订户,在这种情况下,您可以检查ContextFound
。
但是,最好的选择是将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):
# ....
关于python - Pyramid 忽略某些 View 的csrf验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13309471/