首页 文章

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

提问于
浏览
1

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 回答

  • 0

    与您在django中所使用的 order 相反,它可能是您的应用程序使用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

相关问题