Djoser - 覆盖注册

Tho*_*ald 4 django-rest-framework djoser

我对如何修改 Djoser 的注册端点感到困惑。我想做的就是向端点添加范围限制,但我不明白如何覆盖它。文档上的此页面讨论了它:https ://djoser.readthedocs.io/en/2.1.0/ adjustment.html 但它似乎已经过时了?今天如何使用 UserViewSet 来完成并确保 url 按预期工作?

Gab*_*Muj 5

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

# 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()
Run Code Online (Sandbox Code Playgroud)

然后在你的urls.py你不应该包括djoser.urls在你的urlpatterns

而不是这个(取自他们的文档,您可能有其他网址):

urlpatterns = [
    (...),
    url(r'^auth/', include('djoser.urls')),
]
Run Code Online (Sandbox Code Playgroud)

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

# 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)),
]
Run Code Online (Sandbox Code Playgroud)

在幕后djoser.urls是注册users端点,但通过其内部UserViewSet,这样您就可以使用自己的自定义类。