Python(3.6.7)和Django(2.1),尝试集成social-auth-app-django .
与this post不同,我已经声明 SOCIAL_AUTH_URL_NAMESPACE
但它不起作用 .
配置:
settings.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'))
]
login.html
<a href="{% url "social:begin" "google-oauth2" %}">Google+</a>
返回的错误是:
/ accounts / login /'social'中的NoReverseMatch不是注册的命名空间
那么, how can I register this namespace ,还是其他地方的问题?
1 回答
与您在django中所使用的 order 相反,它可能是您的应用程序使用contrib.auth但它在实例化之前调用它的某些部分的问题 .
尝试将那些自定义的东西放在底部并告诉我它是否仍然存在 .
正如您所看到的,在您发布的链接上,自定义应用程序被称为最后一个,因此他们可以使用auth和admin