gpt4 book ai didi

python - 使用 Django 限制 url 访问

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:32 25 4
gpt4 key购买 nike

我有一个管理汽车的应用程序。每个用户都可以添加汽车并使用它,一切都很好,但我有一个问题。假设 bob 通过 mysite.com/cars/1 和 mysite.com/cars/3 拥有汽车 1 和 3marc 通过 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/4Bob 无法访问 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)非常简单并且有据可查。

希望这对您有所帮助!

关于python - 使用 Django 限制 url 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com