Django REST Framework (DRF):类型错误:register() 获得意外的关键字参数“base_name”

pythonDjango

1个回答

写回答

15754046502

2025-06-19 00:30

+ 关注

Django
Django

使用Django REST Framework(DRF)是一种方便快捷地构建Web API的方法。然而,在使用DRF时,有时会遇到类型错误,即"register()获得意外的关键字参数'base_name'"。本文将探讨这个错误的原因,并提供解决方案。

首先,让我们了解一下DRF的基本概念。DRF是一个用于构建Web API的强大框架,它基于Django,并提供了许多有用的功能和工具。其中之一是使用视图集(ViewSets)来处理API的不同请求。视图集可以将相关的请求(例如获取、创建、更新和删除)组合在一起,从而简化了代码的编写和维护。

在注册视图集时,我们需要使用DRF提供的register()函数。这个函数接受两个参数:路由器(router)和视图集(viewset)。其中,路由器用于管理API的URL,而视图集定义了API的行为。在早期版本的DRF中,我们可以使用base_name参数来指定视图集的名称,以便在URL中使用。然而,在最新版本的DRF中,这个参数已经被废弃了。

现在,让我们看一下一个例子,以更好地理解这个错误。假设我们有一个名为"books"的应用程序,我们想要创建一个视图集来处理与图书相关的请求。我们可以在views.py文件中定义一个BookViewSet类,其中包含我们的API逻辑。

Python

from rest_framework import viewsets

class BookViewSet(viewsets.ModelViewSet):

queryset = Book.objects.all()

serializer_class = BookSerializer

接下来,我们需要在urls.py文件中注册这个视图集。在过去,我们可以使用base_name参数来指定视图集的名称。然而,在最新版本的DRF中,我们不再需要使用这个参数。因此,我们应该将代码更新为以下形式:

Python

from Django.urls import include, path

from rest_framework import routers

from .views import BookViewSet

router = routers.DefaultRouter()

router.register('books', BookViewSet)

urlpatterns = [

path('', include(router.urls)),

]

现在,我们已经解决了这个错误,并成功地注册了我们的视图集。我们可以使用"/books"路径来访问与图书相关的API端点。

解决"register()获得意外的关键字参数'base_name'"错误

在最新版本的DRF中,我们不再需要使用base_name参数来注册视图集。相反,我们只需要使用视图集的名称即可。这样,我们可以避免"register()获得意外的关键字参数'base_name'"错误。因此,当注册视图集时,请确保不要使用base_name参数。

在使用Django REST Framework构建Web API时,我们可能会遇到"register()获得意外的关键字参数'base_name'"错误。这个错误的原因是在最新版本的DRF中,base_name参数已经被废弃。为了解决这个错误,我们应该更新注册视图集的代码,不再使用base_name参数。通过遵循最新的DRF规范,我们可以成功地构建和管理我们的API。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号