Django rest framework Djoser-覆盖注册

Django rest framework Djoser-覆盖注册,django-rest-framework,djoser,Django Rest Framework,Djoser,我对如何修改Djoser的注册端点感到困惑。我只想向端点添加作用域节流,但我不知道如何覆盖它。 文档的这一页介绍了这一点: 但它似乎过时了? 今天如何使用UserViewSet并确保url按预期工作?您可以做的是将djoserUserViewSet子类化并添加额外的代码。像这样的东西应该有用 # your_views.py from djoser.views import UserViewSet as DjoserUserViewSet class UserViewSet(DjoserUs

我对如何修改Djoser的注册端点感到困惑。我只想向端点添加作用域节流,但我不知道如何覆盖它。 文档的这一页介绍了这一点: 但它似乎过时了?
今天如何使用UserViewSet并确保url按预期工作?

您可以做的是将djoser
UserViewSet子类化并添加额外的代码。像这样的东西应该有用

# your_views.py

from djoser.views import UserViewSet as DjoserUserViewSet


class UserViewSet(DjoserUserViewSet):

    def get_throttles(self):
        if self.action == "create":
            self.throttle_classes = [YourThrottleClass]
        return super().get_throttles()
然后在
urls.py
中,您不应该在
urlpatterns
中包含
djoser.urls

与此相反(取自他们的文档,您可能有其他url):

urlpatterns
中执行此操作(您可能已经定义了路由器):


幕后的
djoser.url
正在注册
用户
端点,但是使用他们的内部
UserViewSet
,这样你就可以使用自己的自定义类了。

这起作用了,我不得不删除router.url周围的引号,例如url(r'^',include(router.url))。此外,我还可以使用self.throttle\u scope=“mycustomscope”代替self.throttle\u类,而不是添加throttle类。同样使用djoser_views.UserViewSet也不起作用,我必须导入UserViewSet。也许你可以编辑你的答案:)谢谢!路由器在覆盖和需要调用super时的工作方式是我以前肯定失败的地方。我编辑了答案以修复所描述的问题。
urlpatterns = [
    (...),
    url(r'^auth/', include('djoser.urls')),
]
# I have use endpoint "auth/users" to keep it similar to the above, but it can be just simple "users"

router = DefaultRouter()
router.register("auth/users", your_views.UserViewSet)  

urlpatterns = [
    (...),
    url(r'^', include(router.urls)),
]