django - 未提供身份验证凭据 drf
问题描述
当我尝试访问 api 时出现此错误:
"detail": "Authentication credentials were not provided."
我已将其包含在 settings.py 中:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES':(
'rest_framework.permissions.IsAuthenticated',
)
}
我的应用程序 api urls.py:
from django.urls import path,include
from . import views
from rest_framework import routers
router = routers.SimpleRouter()
router.register(r'',views.UserViewSet, 'user_list')
urlpatterns = router.urls
我的意见.py:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.object.all()
serializer_class = serializers.UserSerializers
序列化程序.py:
from rest_framework import serializers
from users.models import User
class UserSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email','password')
我的主要 urls.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls)),
path ('', include(user_urls)),
path('api/',include(api_urls)),
当我运行 localhost:8000/api 时出现错误
解决方案
如果您使用的是TokenAuthentication ,则无法从浏览器 url 访问 api 。正如@DarkOrb TokenAuthentication 所说,需要一个带有令牌的授权标头作为它的值。因此,每当您调用api时,您都必须传递令牌。您可以使用postman测试您的 api 。
在上图中,我在邮递员的标头中传递了令牌以访问我的 api。当您从前端调用您的 api 时,将您的令牌与请求一起传递。如果您只想在桌面浏览器中使用您的 api,在这种情况下,您只能使用SessionAuthentication 。对于移动设备,必须进行Tokenauthentication 。
推荐阅读
- r - 为什么从使用不同字符 (å > a) 编码的数据帧中提取值?
- javascript - 如何使用 React.Context 进行事件跟踪
- java - 嵌套流异常
- python - Flask-SQLalchemy 分页错误,无法为端点构建 url
- laravel - 如何使用 Laravel API 资源对加载的关系进行分页
- arrays - 如何在索引处访问数组字典的数组值?
- isabelle - 在 Isabelle 中完善定义
- python - 无法使用 Python 请求会话模块登录网站
- node.js - 如何在开发模式下针对大量记录优化 MongoDB 查询?
- python - 遍历 pandas 数据框中的特定列和行以执行检查