Django Middleware + URL

Joe*_*Joe 3 django middleware

中间件是否可以检查URL中是否有值,例如图像ID("/ image/152 /"),如果是,则进行一些检查以确保当前用户有权查看该图像和如果没有重定向到另一个网址?

我不得不为我正在处理的这个网站滚动自己的权限,我不想几乎用我用相同的代码编写整个网站的每个视图,所以我认为一个中间件对于这个来说是个好主意,但我不知道该如何去做.

Jar*_*die 8

是的,这是可能的.process_request的django 中间件文档表明:

def process_request(self,request)

request是一个HttpRequest对象.在Django决定执行哪个视图之前,会在每个请求上调用此方法.

process_request()应返回None或HttpResponse对象.如果它返回None,Django将继续处理此请求,执行任何其他中间件,然后执行相应的视图.如果它返回一个HttpResponse对象,Django将不会打扰调用任何其他请求,视图或异常中间件或相应的视图; 它将返回HttpResponse.

HttpRequest对象具有一个path属性,该属性将为您提供所请求的URL.

但是,如果您愿意,请注意您还可以扩展Django的系统以进行身份​​验证后端,以根据任何任意条件(例如您的手动权限方案)使用权限填充请求中的用户.这样,您可以利用默认的身份验证装饰器(@permission_required@user_passes_test),其他应用程序/管理站点也将能够兑现您的权限.创建的User对象和权限不需要驻留在Django的用户/权限表中,并且可以在登录时虚拟创建; 我已经取得了相当大的成功.

如果有此请求,请参阅编写身份验证后端.