Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建自定义用户权限_Python_Django - Fatal编程技术网

Python 如何创建自定义用户权限

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配置文件(这是错误的),但当我尝试访问其他用户配

我正在尝试创建自定义用户权限。当用户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禁止。但我的代码似乎正朝着相反的方向运行

模型

装饰师

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..请检查这个问题,我无法解决这个问题@萨米..你能检查一下这个问题吗,我还没能解决这个问题。