social-auth-app-django 'social' 不是已注册的命名空间



Python(3.6.7(和Django(2.1(,试图集成社交认证应用程序Django

与本文不同,我声明了SOCIAL_AUTH_URL_NAMESPACE,但它不起作用。

配置:

设置.py:

import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"Microlly",
"social_django",
]
AUTHENTICATION_BACKENDS = [
'social_core.backends.github.GithubOAuth2',
'social_core.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend',
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"social_django.middleware.SocialAuthExceptionMiddleware"
]
ROOT_URLCONF = "microblogging.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
"social_django.context_processors.backends",
"social_django.context_processors.login_redirect",
]
},
}
]
WSGI_APPLICATION = "microblogging.wsgi.application"
SOCIAL_AUTH_URL_NAMESPACE = 'social'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY="SECRET"
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET="SECRET"
SOCIAL_AUTH__KEY="ID"
SOCIAL_AUTH__SECRET="SECRET"
# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"
},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]
STATIC_ROOT = os.path.join(BASE_DIR, "static")
LOGIN_REDIRECT_URL = "/accounts/"
EMAIL_BACKEND = (
"django.core.mail.backends.console.EmailBackend"
)  # During development only

urls.py:

from django.conf.urls import url
from django.contrib.auth import views as auth_views
from django.urls import include, path, reverse_lazy
from Microlly import views
app_name = "Microlly"

urlpatterns = [
path("", views.index, name="index"),
path("accounts/", include("django.contrib.auth.urls")),
url('^api/v1/', include("social_django.urls", namespace='social'))
]

登录.html

<a href="{% url "social:begin" "google-oauth2" %}">Google+</a>

返回的错误为:

/accounts/login/
"social"不是已注册的命名空间

那么,我如何注册此命名空间,或者问题出在其他地方?

与您可能认为的导入您的django应用程序的顺序相反,在django中非常重要,这可能是一个问题,您的应用程序正在使用contrib.auth,但它在实例化之前调用了它的某些部分。

INSTALLED_APPS = [
"Microlly",   <-------------move down
"social_django",   <--------------move down
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]

试着把那些定制的放在底部,告诉我它是否持续。

正如你所看到的,在你发布的链接上,自定义应用程序被称为最后一个,所以它们可以使用auth和admin

最新更新