如何在 Djoser 中禁用用户名更改?

Posted

技术标签:

【中文标题】如何在 Djoser 中禁用用户名更改?【英文标题】:How to disable username change in Djoser? 【发布时间】:2019-04-09 00:27:06 【问题描述】:

我没有在文档中找到有关如何排除/禁用 Djoser 提供的任何端点的任何信息。我可以在它的 urlpatterns 中查找一个并将其删除,但我想知道是否有更丑陋的方法可以做到这一点。

【问题讨论】:

目前不可能。 【参考方案1】:

在包含 djoser 的 URL 之前,您可以编写一个返回错误代码的自定义视图并在您自己的 urls.py 中提供它,以抢占对特定端点的访问。

它不如设置支持这一点那么理想,但除非/除非应用程序支持这一点,否则用你自己的 URL 覆盖它是一种无需维护应用程序的修改本地版本即可完成你所要求的事情的方法.

【讨论】:

【参考方案2】:

我找到了一个不错的解决方案。不要使用include("djoser.urls.base"),而是这样做:

from djoser.views import UserViewSet

# Taken from Djoser's source
router = DefaultRouter()
router.register(r"users", UserViewSet, basename="users")

def is_route_selected(url_pattern):
    urls = [
        "usuarios/set_email/",
        "usuarios/reset_email_confirm/",
    ]

    for u in urls:
        match = url_pattern.resolve(u)
        if match:
            return False
    return True

# Filter router URLs removing unwanted ones
selected_user_routes = list(filter(is_route_selected, router.urls))

# Of course, instead of [] you'd have other URLs from your app here:
urlpatterns = [] + selected_user_routes

【讨论】:

以上是关于如何在 Djoser 中禁用用户名更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 djoser 端点(.../users/me)检索用户数据

如何覆盖 Djoser 基本端点用户/我

在 Djoser 和 Rest Framework 中使用自定义字段注册用户

Djoser:触发用户帐户激活操作

Djoser 用户激活电子邮件 POST 示例

DRF:Djoser 覆盖自定义用户序列化程序