Skip to main content
 首页 » 编程设计

python之使用 Django 限制 url 访问

2024年08月29日26xxx_UU

我有一个管理汽车的应用程序。 每个用户都可以添加汽车并使用它,一切都很好,但我有一个问题。 假设 bob 通过 mysite.com/cars/1 和 mysite.com/cars/3 拥有汽车 1 和 3 marc 通过 mysite.com/cars/2 拥有汽车 2

问题是 bob 可以通过 mysite.com/cars/2 读取汽车信息,但这不是他的,与 marc 相同,通过 mysite.com/cars/1 和 mysite.com/cars/3。

我如何限制访问?通过中间件?

这个问题可以分片展开。汽车是由零件组成的。例如,鲍勃的车包含 mysite.com/pieces/1、mysite.com/pieces/2、mysite.com/和 mysite.com/pieces/3,马克的车是 mysite.com/pieces/4 Bob 无法访问 mysite.com/pieces/4,marc 无法访问 mysite.com/pieces/1 mysite.com/pieces/2 和 mysite.com/pieces/3。

请您参考如下方法:

我只是在猜测您的模型和 View ,但这是让您入门的简单方法:

View .py

from django.core.exceptions import PermissionDenied 
def cars(request, car_id): 
    ... 
    if request.user != car.owner: 
        raise PermissionDenied 
    ... 

更新:添加了import指令

更新 2:添加了一些仍在猜测您的 View 和模型的中间件代码。

对于中间件,方法应该是这样的:

my_app/middleware.py

# custom middleware 
 
class CustomMiddleware(object): 
 
    def process_view(self, request, view_func, view_args, view_kwargs): 
        # get the car param passed to the view (not sure if it is with kwargs or args 
        car_id = view_kwargs['car_id'] 
        car = # retrieve car from the db 
        if request.user != car.owner: 
            raise PermissionDenied 

您在 settings.py 中导入它,添加完整的 python 命名空间。

你可以看看 docs about middleware在我看来,它们的钩子(Hook)非常简单并且有据可查。

希望这对您有所帮助!