[英]django-hosts - How to manage invalid urls in a subdomain .django.urls.exceptions.Resolver404?
[英]How to log in on API-level with django-hosts subdomain and DRF
我正在使用django-rest-framework (DRF) 來擁有一個可瀏覽的 API,它應該在api
子域下可用,例如api.localhost:8000
。 為了服務子域,我使用django-hosts 。 我無法在 API 級別(即在api
子域下)實現登錄和注銷功能。
子域有效,但我無法再使用 DRF 身份驗證機制。
訪問api.localhost:8000/
顯示可瀏覽的 api 頁面,這很好。 DRF 登錄按鈕也可用。 使用此按鈕顯示登錄表單,但是在提交表單時,我被重定向到http://login/
這當然無法解析,因此登錄失敗。 這同樣適用於注銷功能,這會導致http://logout/
並且也失敗。 以下是這些步驟的屏幕截圖。
ROOT_URLCONF = "server.urls"
ROOT_HOSTCONF = "server.hosts"
DEFAULT_HOST = "api"
# 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
)
# 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)
到根 urls conf,我總是得到'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
and Log out
按鈕,我在之前注冊的命名空間下包含了rest_framework.urls
。 之后,包含通常的應用程序 url,用於路由下面屏幕截圖中顯示的users
API 端點。
# 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/
並且也失敗。
添加 PARENT_HOST 設置。 這將使您的重定向正確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.