Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 权限:在django rest框架中_Python_Django_Django Rest Framework - Fatal编程技术网

Python 权限:在django rest框架中

Python 权限:在django rest框架中,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在研究django rest框架。我的权限有问题。 我想给管理员用户授予GET和POST权限,只给其他用户授予POST权限(可信)。到目前为止,我已经编写了以下代码: 佩米西斯酒店 class UserAccessPermission(permissions.BasePermission): def has_permission(self, request, view): if request.method == 'GET' or request.method ==

我正在研究django rest框架。我的权限有问题。 我想给管理员用户授予GET和POST权限,只给其他用户授予POST权限(可信)。到目前为止,我已经编写了以下代码:

佩米西斯酒店

class UserAccessPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        if request.method == 'GET' or request.method == 'POST':
            return request.user and request.user.is_staff
        if request.method == 'POST':
            return request.user and request.user.is_authenticated()
此代码未按预期工作。只有管理员用户才能获取和发布。其他用户没有获得任何类型的权限

伙计们帮忙。 提前谢谢

已编辑

class UserAccessPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return request.user and request.user.is_authenticated()
        elif request.method == 'GET':
            return request.user and request.user.is_staff

您正在使用
elif
,但不会对该部分进行评估,因为如果方法为
POST
,则第一个条件始终为
True

您的条件中存在错误。如果是GEt请求,则第一个条件始终匹配,这需要管理员权限

以下是您想要的:

class UserAccessPermission(permissions.BasePermission):
    def has_permission(self, request, view):
    if request.method == 'POST':
            return request.user and request.user.is_authenticated()    
    elif request.method == 'GET': # no need to check for POST here
            return request.user and request.user.is_staff

这段代码毫无意义。elif块永远不会被执行。好吧,我忘了编辑admin是否始终具有post权限?是的,如果该方法是post,则如果用户经过身份验证(包括职员/管理员),则该方法将始终返回True。当我在浏览器中以普通(经过身份验证的)用户(不是管理员)身份登录时出现问题,我无法发布,但当我使用邮差浏览器应用程序“然后我就可以在那里发布了。如果你在浏览器中打开开发工具,你就可以看到提出的请求。检查来自Postman的请求与来自浏览器的请求之间的差异。它在Postman中工作,但在可浏览的API文档中不工作,这意味着您发送请求的方式存在一些差异。我怀疑这是身份验证的问题。您对API使用哪种身份验证?