Как отключить смену имени пользователя в Djoser?

Я не нашел никакой информации в документации о том, как исключить / отключить любую из конечных точек, предоставленных Djoser. Я мог бы просто найти один в его urlpatterns и удалить его, но мне интересно, есть ли какой-нибудь менее уродливый способ сделать это.

2 ответа

Вы можете написать собственное представление, которое возвращает код ошибки, и предоставить его по своему усмотрению. urls.py перед включением URL-адресов djoser, чтобы запретить доступ к определенным конечным точкам.

Это не так идеально, как наличие настроек для поддержки этого, но до тех пор, пока приложение не поддерживает это, переопределение своих URL-адресов своими собственными - это способ выполнить то, что вы просите, без необходимости поддерживать измененную локальную версию приложения.

Я нашел хорошее решение. Вместо использования 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
Другие вопросы по тегам