django “detail”:“未提供身份验证凭据,”发送给管理员

kxe2p93d  于 2023-02-05  发布在  Go
关注(0)|答案(3)|浏览(179)

我有我的管理员令牌,预订条目是允许在失眠症,但不允许DRF显示。我错过了什么,请?有办法提供它被允许的令牌?

#view.py

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from rest_framework import viewsets
from .models import Booking, Menu
from .serializers import BookingSerializer, MenuSerializer, UserSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from rest_framework import generics
from datetime import datetime
from django.views.decorators.csrf import csrf_exempt
from django.db.models import Sum
from django.contrib import messages


def home(request):
    return render(request, 'index.html')

def about(request):
    return render(request, 'about.html')

class UserRegistrationView(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class BookingViewSet(viewsets.ModelViewSet):
    queryset = Booking.objects.all()
    serializer_class = BookingSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]

settings.py

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_AUTHENTICATION_CLASS': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication'
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}
csga3l58

csga3l581#


选择标头键将为Authorization,值将如下所示

Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
omvjsjqw

omvjsjqw2#

我认为您需要删除session身份验证类,因为此处使用了令牌进行身份验证
我是说身份验证类覆盖。
因此,删除会话身份验证类,仅放置令牌身份验证类
但是,如果要使用browsable进行身份验证,则需要删除令牌身份验证并放置会话身份验证类。
如果您想使用令牌进行身份验证,则需要使用支持令牌身份验证的POSTMAN或其他第三方API测试工具,并且需要删除会话身份验证并需要放置令牌身份验证类

令牌身份验证设置(使用Postman或其他第三方API测试工具进行测试)

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_AUTHENTICATION_CLASS': (
        'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

会话身份验证设置(使用提供DRF内置功能的可浏览API进行测试)

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_AUTHENTICATION_CLASS': (
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}
7kqas0il

7kqas0il3#

在我看来你应该删除这行代码

'rest_framework.authentication.SessionAuthentication'

试试看。

相关问题