无法使用Django rest框架进行身份验证(请求用户=匿名用户)

2024-06-03 01:08:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为传入请求配置身份验证,但无法理解实现该请求所需的步骤。你知道吗

我遵循了documentation中提供的步骤

首先,我编辑了auth设置的setting.py

INSTALLED_APPS = [
    ...,
    'rest_framework',
    'rest_framework.authtoken',
    ...,
]

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.BasicAuthentication',
            'rest_framework.authentication.TokenAuthentication',
        )
    }

view.py中:

@csrf_exempt
def uuid_details(request, uuid):

    if request.method == 'GET':
        print "user: " + str(request.user)  #  user: AnonymousUser

因此,当我调用上面的restapi时,在上面的行中,我得到的输出是AnonymousUser。根据我的理解,我应该接收经过身份验证的User对象。你知道吗

我能够检索令牌并将其传递给restapi。你知道吗

>>> Token.objects.get(user=user)
<Token: 95119884347cf000caab9d2596b9a18a9103f1db>

因此,我无法理解Django rest框架中的身份验证是如何工作的。你知道吗


Tags: pytokenauth身份验证restrestapi编辑authentication
2条回答

看起来您有一个常规的Django视图,所以rest框架验证代码都不会运行。你知道吗

def uuid_details(request, uuid):

您可以使用api_view装饰器将其转换为rest框架视图。你知道吗

from rest_framework.response import Response
from rest_framework.decorators import api_view

@api_view(['GET'])
def uuid_details(request, uuid):
    return Response({"message": "user: " + str(request.user)}

两件事:

  1. @csrf不适用于DRF视图。是给生的Django的。你知道吗
  2. 你没有用DRF decorator for function views

一旦这两点被解决,它就应该起作用。你知道吗

相关问题 更多 >