Я использую django -rest-framework (DRF), чтобы иметь доступный для просмотра API, который должен быть доступен в поддомене api
, например, api.localhost:8000
. Для обслуживания поддоменов я использую django -hosts . У меня проблемы с достижением функций входа и выхода из системы на уровне API (т. Е. В поддомене api
).
Субдомены работают, но я больше не могу заставить механизм аутентификации DRF работать.
Проблема
Посещение api.localhost:8000/
показывает доступную для просмотра страницу API. Кнопка входа в систему DRF также доступна. При использовании этой кнопки отображается форма входа в систему, но при отправке формы я перенаправляюсь на http://login/
, что, конечно, не может быть решено, и, следовательно, вход в систему не удается. То же самое относится и к функциональности выхода из системы, что приводит к http://logout/
и также приводит к сбою. Ниже приведены скриншоты для этих шагов.
Django Настройки
ROOT_URLCONF = "server.urls"
ROOT_HOSTCONF = "server.hosts"
DEFAULT_HOST = "api"
django -конфигурация хостов
# server/hosts.py
from django_hosts import patterns, host
from django.conf import settings
host_patterns = patterns(
'',
host(r"api", "server.api_urls", name="api"),
host(r"admin", "server.admin_urls", name="admin"),
host("", settings.ROOT_URLCONF), # resolves to server/urls.py
)
Конфигурация URL-адресов
# server/urls.py
from django.urls import include, path
# this is my root url conf
urlpatterns = [
path("", include("server.api_urls")),
path("", include("rest_framework.urls", namespace='rest_framework')),
path("", admin.site.urls),
]
Я не доволен этим, но, хотя я обслуживаю его в другом поддомене, не добавляя path("", admin.site.urls)
к root conf urls, я всегда получаю 'admin' is not a registered namespace
. По той же причине я включил rest_framework.urls
здесь, потому что в противном случае пространство имен rest_framework
не было зарегистрировано.
# server/api_urls.py
urlpatterns = [
path("", include('rest_framework.urls', namespace='rest_framework')),
path("", include("myapp.urls")), # here is the DRF routing
]
Чтобы использовать механизм аутентификации DRF и кнопки Log in
и Log out
, Я включаю rest_framework.urls
в пространство имен, которое я зарегистрировал ранее. После этого включены обычные URL-адреса приложений, которые маршрутизируют конечную точку API users
, показанную на снимке экрана ниже.
# server/admin_urls.py
from django.contrib import admin
urlpatterns = [
path("", admin.site.urls),
]
Снимки экрана
При посещении api.localhost:8000/
отображается страница API с возможностью просмотра.
Использование кнопки Log in
перенаправляет на http://api.localhost:8000/login/?next=/
, что нормально.
Но после отправки формы, я перенаправлен на http://login/
, что, конечно, не может быть решено, и, следовательно, вход в систему не удается. То же самое относится к функциональности выхода из системы, которая приводит к http://logout/
, а также к сбою.
Как я могу исправить механизм аутентификации для работы на API -уровень