Python 如何创建自定义用户权限
我正在尝试创建自定义用户权限。当用户A阻止用户B时,当用户B登录并尝试通过url(localhost:8000/user\u A\u profile/)访问用户A配置文件时,应该显示404禁止,但用户B可以访问其他用户。我发现这样做的方法是创建一个decorator.py,我已经这样做了,我有一个问题。我已经创建了decorator.py,但是当用户a阻止用户B时,当用户B登录并尝试通过url访问用户a配置文件时,情况正好相反。用户B能够访问用户A配置文件(这是错误的),但当我尝试访问其他用户配置文件时,我得到了404禁止。当用户A已经阻止了用户B,并且用户B可以访问其他用户时,如何将仅用户A设置为显示404禁止。但我的代码似乎正朝着相反的方向运行 模型 装饰师Python 如何创建自定义用户权限,python,django,Python,Django,我正在尝试创建自定义用户权限。当用户A阻止用户B时,当用户B登录并尝试通过url(localhost:8000/user\u A\u profile/)访问用户A配置文件时,应该显示404禁止,但用户B可以访问其他用户。我发现这样做的方法是创建一个decorator.py,我已经这样做了,我有一个问题。我已经创建了decorator.py,但是当用户a阻止用户B时,当用户B登录并尝试通过url访问用户a配置文件时,情况正好相反。用户B能够访问用户A配置文件(这是错误的),但当我尝试访问其他用户配
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from pixmate.models import Profile, Post
#Blocked users can not find current user profile in url
def user_is_blocked(function):
def wrap(request, *args, **kwargs):
profile = get_object_or_404(Profile, user__username=kwargs['username'])
if Profile.objects.filter(blocked_users=profile):
return function(request, *args, **kwargs)
else:
raise PermissionDenied
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
你需要一个像这样的装饰师
def user_is_blocked(function):
def wrap(request, *args, **kwargs):
profile = get_object_or_404(Profile, user__username=kwargs['username'])
if Blocked.objects.filter(user_is_blocking=profile.user, user_is_blocked=request.user):
raise PermissionDenied
return function(request, *, **kwargs)
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
我们需要检查请求用户是否被我们查看其配置文件的用户阻止(在您的代码中,您没有在任何地方检查请求用户),因此我们需要使用阻止的对象,如果存在具有请求用户属性user\u的阻塞模型的任何对象,并且我们要获取用户\u的配置文件的用户是\u阻塞的,则在该对象上进行搜索。您需要类似的装饰器
def user_is_blocked(function):
def wrap(request, *args, **kwargs):
profile = get_object_or_404(Profile, user__username=kwargs['username'])
if Blocked.objects.filter(user_is_blocking=profile.user, user_is_blocked=request.user):
raise PermissionDenied
return function(request, *, **kwargs)
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
我们需要检查请求用户是否被我们查看其配置文件的用户阻止(在您的代码中,您没有在任何地方检查请求用户),因此我们需要使用阻止的对象,如果存在任何被阻止模型的对象,并且该对象在属性user_中具有请求用户,则搜索该对象。user_被阻止,并且我们要获取in user_的配置文件的用户是_阻止。@Sami..请检查这个问题,我无法解决这个问题@萨米..你能检查一下这个问题吗,我还没能解决这个问题。