Как отключить смену имени пользователя в 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