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

django

1个回答

写回答

Angeltac

2025-09-01 16:45

+ 关注

Django
Django

使用Django REST Framework (DRF)创建API是开发Web应用程序的常见做法。然而,有时候我们会遇到一些错误,例如在使用DRF的register()函数时遇到了一个类型错误,提示意外的关键字参数"base_name"。在本文中,我们将探讨这个错误的原因,并提供解决方案。

首先,让我们了解一下什么是Django REST Framework。它是一个强大的工具包,用于在Django框架中构建RESTful API。DRF提供了许多功能,如序列化、视图、路由和认证等,使开发API变得更加简单和高效。

当我们使用DRF的register()函数来注册一个视图集时,通常会提供一个base_name参数。这个参数用于生成URL模式,以便在API中访问该视图集。然而,有时候我们可能会错误地传递了一个不正确的参数,导致了"base_name"意外的关键字参数错误。

为了更好地理解这个问题,让我们来看一个具体的案例代码。假设我们正在开发一个博客应用程序,并希望创建一个API来管理文章。我们首先定义一个Article模型,如下所示:

Python

from Django.db import models

class Article(models.Model):

title = models.CharField(max_length=100)

content = models.TextField()

接下来,我们创建一个Article视图集,并使用DRF的register()函数进行注册,如下所示:

Python

from rest_framework.viewsets import ModelViewSet

from .models import Article

from .serializers import ArticleSerializer

class ArticleViewSet(ModelViewSet):

queryset = Article.objects.all()

serializer_class = ArticleSerializer

现在,我们将在urls.py文件中注册该视图集,并提供一个base_name参数:

Python

from Django.urls import include, path

from .views import ArticleViewSet

from rest_framework.routers import DefaultRouter

router = DefaultRouter()

router.register(r'articles', ArticleViewSet, base_name='article')

urlpatterns = [

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

]

在这个例子中,我们将视图集注册到了"articles"路径,并将base_name参数设置为"article"。

然而,如果我们在执行代码时遇到了"base_name"意外的关键字参数错误,这可能是由于使用了不正确的版本的DRF导致的。在较新的版本中,DRF不再使用base_name参数,而是使用basename参数。因此,为了解决这个错误,我们需要将base_name参数更改为basename参数,如下所示:

Python

router.register(r'articles', ArticleViewSet, basename='article')

通过这个简单的更改,我们可以解决"base_name"意外的关键字参数错误,并成功注册我们的视图集。

在本文中,我们讨论了在使用DRF的register()函数时遇到的"base_name"意外的关键字参数错误。我们了解到这个错误可能是由于使用了不正确的版本的DRF导致的。为了解决这个问题,我们需要将base_name参数更改为basename参数。通过这个简单的更改,我们可以成功注册我们的视图集,并继续开发我们的API。请记住,在使用DRF时,始终确保使用最新的版本,并仔细检查文档以了解任何更改和更新。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号